0

我正在尝试对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: No JSON object could be decoded

当我尝试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')

但它仍然给出同样的错误。

4

1 回答 1

3

根据http://api.stackoverflow.com/1.0/usage返回的信息被压缩。您必须解压缩二进制数据才能获得实际的 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()
于 2012-10-22T06:00:58.050 回答