リクエストライブラリからのJSON応答を解析する最良の方法は何ですか?


266

Python requestsモジュールを使用して、RESTful GETをサーバーに送信します。サーバーに対してJSONで応答を取得します。JSON応答は、基本的には単なるリストのリストです。

ネイティブPythonオブジェクトへの応答を強制するのに最適な方法は何pprintですか?それを使用して反復または出力できますか?

回答:


307

使用できますjson.loads

import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)

これにより、指定された文字列が辞書に変換され、コード内でJSONデータに簡単にアクセスできるようになります。

または、@ Martijnの役立つ提案と投票数の多い回答を使用することもできますresponse.json()


3
わかりましたが、各要素はまだユニコードです。
felix001 2013年

@ felix001:はい、ただしを使用して任意のデータを変換できますstr()。一方、Unicodeデータは(将来に備えて)持っておくのは悪くありません。
Simeon Visser 2013年

162
多くの、より良い使用にresponse.json()、それはやるとしてより良い仕事に使用するエンコーディングを考え出すのを。(免責事項、私はそのコードのいくつかを書きました)。
Martijn Pieters

@MartijnPieters:では、リクエストのmemcachedテキストで後でリクエストjsonパーサーをどのように使用できますか?つまり、response.text()
ニューリノ

@MartijnPieters、found:requests.compat.json.loads(resp_text)
ニューリノ

469

を使用しているのでrequests、応答のjsonメソッドを使用する必要があります。

import requests

response = requests.get(...)
data = response.json()

これは、使用するデコーダを自動検出します


2
たとえば、v0.12とv1.0の間のどこかに表示されているため、たとえばpython-requestsのUbuntu 12.04 deb-packageにはまだこの機能がありません(v0.8です)。pip install requestsただし、debパッケージを使用する代わりにできます。
timurb 2013年

5
dataリストのリストか辞書か、今は少し気になります。
クリシュナオザ

6
@Krishna_Oza dataは、読み取っているJSONの構造を反映しています。たとえば、応答がである場合[{"a": {...}}]dataは、を含むリストlist[0] == {'a': {...}}です。応答がの{"a": "b", "c": "d"}場合dataは、dictです。それはあなたの質問に答えますか?
pswaminathan

1
@CGFoX実行しているバージョンは?APIが最新バージョンでも同じように機能することを私はまだ見ています>>> import requests >>> r = requests.get('http://httpbin.org/get') >>> r.json <bound method Response.json of <Response [200]>> >>> r.json() {'args': {}, ...}
。– pswaminathan

4
通常はjson.loads(response.text)メソッドを使用していたので、これに賛成票を投じてください。いくつかの大きなjsonでは、respons.json()を使用すると他の方法よりもはるかに高速であることがわかりました。
ポールR.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.