从请求库解析JSON响应的最佳方法是什么?


266

我正在使用python requests模块将RESTful GET发送到服务器,对此我得到了JSON响应。JSON响应基本上只是列表的列表。

强制对本地Python对象进行响应的最佳方法是什么,以便我可以使用进行迭代或打印出来pprint

Answers:


306

您可以使用json.loads

import json
import requests

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

这会将给定的字符串转换为字典,从而使您可以轻松地在代码中访问JSON数据。

或者,您可以使用@Martijn的有用建议以及投票较高的答案response.json()


3
好的,但是每个元素仍然是unicode。
felix001 2013年

@ felix001:是的,尽管您可以使用转换任何数据str()。另一方面,Unicode数据也不错(为将来做准备)。
Simeon Visser 2013年

162
使用起来要好得多response.json(),因为它将更好地弄清楚所使用的编码。(免责声明,我写了一些代码)。
马丁·彼得斯

@MartijnPieters:那我以后如何在响应的memcached文本上使用请求json解析器?即具有输出response.text()
neurino

@MartijnPieters,发现:requests.compat.json.loads(resp_text)
neurino

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

5
我有点好奇,现在data它是列表列表还是字典。
克里希纳(Krishna Oza)

6
@Krishna_Oza data反映了它正在读取的JSON的结构。例如,如果响应为:[{"a": {...}}]data是带有的列表list[0] == {'a': {...}}。如果响应为{"a": "b", "c": "d"}data则为dict。这是否回答你的问题?
pswaminathan,2015年

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()的速度比其他方法快得多。
Paul R.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.