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
标记了它,这是一个非常特定的协议,Pythonjson
模块不支持(不需要)。为什么要这样做?在读取响应和解码数据之间没有代码——因此,如果您真的尝试打印响应(而不是加载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”,“有趣的输出。我将对此进行研究。