JSON是否包含在NULL中?[重复]

kr98yfug  于 2023-01-03  发布在  其他
关注(0)|答案(2)|浏览(183)
    • 此问题在此处已有答案**:

What is JSONP, and why was it created?(10个答案)
Django - Parse JSONP (Json with Padding)(2个答案)
昨天关门了。
我正在使用一个联盟网络(Sovrn)的API,期望使用URL检索产品的规格。
根据他们的文档,我使用:

url = 'URL-goes-here'

headers = {
    "accept": "application/json",
    "authorization": "VERY-HARD-TO-GUESS"
}

response = requests.get(url, headers=headers)

代码正常工作,我得到的响应是200,标头包含神奇的content-type application/json
当我这样做

print(response.text)

我得到

NULL({"merchantName":"Overstock","canonicalUrl":"URL goes here","title":"product name",...});

我测试了响应类型response.text,结果是<class 'str'>,但当我尝试将响应作为json处理时:

product_details = json.load(response.text)

我收到一条错误消息:

requests.exceptions.JSONDecodeError: [Errno Expecting value]

我是JSON新手,但我认为错误是由于 Package (看似有效的)数据的外部NULL造成的。
在花了几个小时寻找解决方案之后,似乎我一定错过了一些明显的东西,但不确定是什么。
任何指示都将是非常有帮助的。

ahy6op9u

ahy6op9u1#

这显然是API中的一个bug。假设在你抱怨之后它会被修复,你可以在代码中添加一个hack

def sovrn_json_load_hack(json_text):
    """sovrn is returning invalid json as of (revision here)."""
    if not json_text.startswith ("NULL("):
        return json.loads(json_text)
    else:
        return json.loads(json_text[5:-2])
yhxst69z

yhxst69z2#

通过使用字符串切片,可以忽略开头的NULL(和结尾的);

product_details = json.loads(response.text[5:-2])

此外,应该使用json.loads(),因为内容是字符串。

相关问题