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:JSONオブジェクトをデコードできませんでした

上記URLからhttp://jsonviewer.stack.hu で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によると、返された情報は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()
于 2012-10-22T06:00:58.050 に答える