Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python不解码json_Python_Json_Jsonp - Fatal编程技术网

Python不解码json

Python不解码json,python,json,jsonp,Python,Json,Jsonp,我收到错误信息: No JSON object could be decoded: line 1 column 0 (char 0) 尝试解析从xbox music api返回的json对象时 这是我的密码: conn = httplib.HTTPSConnection(SERVICE_API) conn.request("GET", url) response = conn.getresponse() data = response.read() j = json.loads(data)

我收到错误信息:

No JSON object could be decoded: line 1 column 0 (char 0)
尝试解析从xbox music api返回的json对象时

这是我的密码:

conn = httplib.HTTPSConnection(SERVICE_API)
conn.request("GET", url)
response = conn.getresponse()
data = response.read()
j = json.loads(data)

最后一行是返回上述错误的内容。如果我对此进行注释并打印出“数据”,我可以看到json对象。如果我将它复制/通过jsonlint.com查看它是否有效,它会说它是有效的。我想把它贴在这里,但它有800行。

您正在访问一个Microsoft服务,该服务一开始就包含UTF-8 BOM表。但是微软非常喜欢UTF-8中的BOM表(这里完全是多余的),因为它将BOM表引入UTF-8,使记事本和其他Windows应用程序更容易自动检测所使用的编码

愚蠢的微软,根据JSON RFC,这是非常无效的;如果任何地方都有联系地址,你应该将此作为错误报告给他们

您可以使用以下工具剥离BOM表:

import codecs

data = response.read()
if data.startswith(codecs.BOM_UTF8):
    data = data[3:]

我们需要看到的不仅仅是这段代码。这里的
数据中到底包含什么?你打什么网址?您能给我们提供
print url
print repr(data[:100])
吗?另外,您用
jsonp
标记了它,这是一个非常特定的协议,Python
json
模块不支持(不需要)。为什么要这样做?在读取响应和解码数据之间没有代码——因此,如果您真的尝试打印响应(而不是加载json)并在其上运行jsonlint,那么神奇的精灵一定在工作。告诉我们整个故事当我注释掉最后一行时,从“j”开始,在上面放一个“打印数据”,屏幕上显示的代码如下:。。。这与我在json验证器中输入的代码相同,但结果是干净的。这是print repr(data[:100])“\xef\xbb\xbf{”Albums:{”Items:[{”ReleaseDate:“2013-09-17T00:00:00Z”,“Duration:“00:45:22”,“TrackCount”:16”,“有趣的输出。我将对此进行研究。