我收到错误:
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)
最后一行是返回上述错误的内容。如果我评论出来并打印出'data',我可以看到json对象。如果我将其复制/过去jsonlint.com以查看它是否有效,它会说它是。我会在这里发布,但它是800行。
答案 0 :(得分:0)
您正在访问包含UTF-8 BOM的Microsoft服务。但微软非常喜欢UTF-8中的BOM(这里完全是多余的),因为它将BOM引入UTF-8,使记事本和其他Windows应用程序更容易自动检测所使用的编码。
愚蠢的微软,根据JSON RFC,它非常无效;如果在任何地方都有联系地址,您应该将其作为错误报告给他们。
您可以使用以下方式剥离BOM:
import codecs
data = response.read()
if data.startswith(codecs.BOM_UTF8):
data = data[3:]