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

Posted

技术标签:

【中文标题】从请求库解析 JSON 响应的最佳方法是啥?【英文标题】:What's the best way to parse a JSON response from the requests library?从请求库解析 JSON 响应的最佳方法是什么? 【发布时间】:2013-05-28 11:07:40 【问题描述】:

我正在使用 python requests module 将 RESTful GET 发送到服务器,为此我得到 JSON 响应。 JSON 响应基本上只是一个列表。

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

【问题讨论】:

【参考方案1】:

由于您使用的是requests,因此您应该使用响应的json 方法。

import requests

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

它autodetects which decoder to use。

【讨论】:

请记住,它出现在 v0.12 和 v1.0 之间的某个位置,因此例如用于 python-requests 的 Ubuntu 12.04 deb-package 还没有此功能(它是 v0.0.0)。 8)。你可以pip install requests 而不是使用 deb 包。 我有点好奇现在data是列表还是字典。 @Krishna_Oza data 反映了它正在读取的 JSON 的结构。例如,如果响应是:["a": ...]data 是一个列表,带有list[0] == 'a': ...。如果响应是"a": "b", "c": "d",则data 是一个字典。这能回答你的问题吗? @CGFoX 你运行的是什么版本?我仍然看到 API 在最新版本上的工作方式相同:>>> import requests >>> r = requests.get('http://httpbin.org/get') >>> r.json <bound method Response.json of <Response [200]>> >>> r.json() 'args': , ... 对此表示赞同,因为我通常使用 json.loads(response.text) 方法,直到在一些大型 json 上我发现使用 respons.json() 比其他方式快得多。跨度> 【参考方案2】:

你可以使用json.loads:

import json
import requests

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

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

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

【讨论】:

好的,但是每个元素仍然是 unicode。 @felix001:是的,尽管您可以使用str() 转换任何数据。另一方面,拥有 unicode 数据也不错(为未来做准备)。 使用response.json() 好多了,因为它会更好地 搞清楚所使用的编码。 (免责声明,我写了一些代码)。 @MartijnPieters:那么我以后如何在响应的 memcached 文本上使用 requests json 解析器?即输出response.text()? @neurino 你想要标准库json module。 requests.compat 模块用于桥接不同的 Python 版本,requests.compat.jsonjson 几乎在您关心的每个系统上都是一样的。【参考方案3】:

您可以直接将json响应用作字典:

import requests

res = requests.get('https://reqres.in/api/users?page=2')
print(f'Total users: res.json().get("total")')

或者您可以将 json 内容保存为字典:

json_res = res.json()

从这个 json_res 字典变量中,您可以提取您选择的任何值

json_res.get('total')
json_res["total"]

注意事项因为这是一本字典,所以您应该留意关键的拼写和大小写,即“总计”与“总计”不同

【讨论】:

以上是关于从请求库解析 JSON 响应的最佳方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Python 请求 - 快速知道响应是不是是 json 可解析的

从 URLRequestConvertible 扩展时设置多部分请求的最佳方法是啥

从flutter应用程序到firebase的简单发布请求的最佳方法是啥?

服务器被DDOS攻击最佳解决方案是啥?报网警有用么?

解析 HTTP JSON 响应 - C# [重复]

在没有第三方库的情况下从 JSON 获取动态对象的最佳方法是啥?