2012-10-22 1 views
0
내가 http://api.stackoverflow.com/1.1/badges/name

JSON 디코딩 오류 - 이상한 문자 텍스트 대신

내 코드에 API 호출을 만들려고 노력하고

의) (json.loads에 apprearing -

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://api.stackoverflow.com/1.1/badges/name

에 가면 내가 UTF-8 인코딩을 추가하는 시도 http://jsonviewer.stack.hu/#http://api.stackoverflow.com/1.1/badges/name

텍스트가 브라우저 창에 정상적으로 표시됩니다 - - 당신은 여기에 출력을 볼 수 있습니다

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

을하지만 여전히를 제공합니다 같은 오류.

답변

3

http://api.stackoverflow.com/1.0/usage에 따르면 반환 된 정보는 gzipped입니다. 실제 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

감사합니다! 이 작품. –