2012-10-22 25 views
0

我試圖讓API調用http://api.stackoverflow.com/1.1/badges/name的Json解碼錯誤 - 奇怪的字符apprearing上json.loads(),而不是文本

我的代碼片段 -

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') 

,但它仍然給了同樣的錯誤。

回答

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() 
+0

謝謝!這工作。 –