我正在尝试对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')
但仍然会出现同样的错误。
答案 0 :(得分:3)
根据http://api.stackoverflow.com/1.0/usage,返回的信息是gzip压缩的。您必须解压缩二进制数据才能获得实际的JSON。您可以使用gzip
和StringIO
模块执行此操作:
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()