Json解码错误 - 出现在json.loads()而不是文本上的奇怪字符

时间:2012-10-22 05:54:26

标签: python json

我正在尝试对http://api.stackoverflow.com/1.1/badges/name

进行API调用

我的代码段 -

url = 'http://api.stackoverflow.com/1.1/badges/name'
f = urllib2.urlopen(url)
content = f.read()
jsonobj = json.loads(content)
print jsonobj

这给了我错误 -     ValueError:无法解码JSON对象

当我尝试http://jsonviewer.stack.hu从上面的URL加载json对象时,它显示了乱码。您可以在此处查看输出 - http://jsonviewer.stack.hu/#http://api.stackoverflow.com/1.1/badges/name

如果您转到http://api.stackoverflow.com/1.1/badges/name

,文本会在浏览器窗口中正常显示

我尝试添加UTF-8编码 -

jsonobj = json.loads(content, encoding = 'UTF-8')

但仍然会出现同样的错误。

1 个答案:

答案 0 :(得分:3)

根据http://api.stackoverflow.com/1.0/usage,返回的信息是gzip压缩的。您必须解压缩二进制数据才能获得实际的JSON。您可以使用gzipStringIO模块执行此操作:

url = urllib2.urlopen('http://api.stackoverflow.com/1.1/badges/name')
zippedContents = url.read()
sio = StringIO.StringIO(zippedContents)
gz = gzip.GzipFile(fileobj=sio)
print gz.read()