解析来自请求库的 JSON 响应的最佳方法是什么?
- 2024-12-20 08:37:00
- admin 原创
- 60
问题描述:
我正在使用 pythonrequests
模块向服务器发送 RESTful GET,并收到 JSON 格式的响应。JSON 响应基本上只是列表的列表。
将响应强制转换为本机 Python 对象的最佳方法是什么,以便我可以使用它进行迭代或打印出来pprint
?
解决方案 1:
由于您正在使用requests
,因此您应该使用响应的json
方法。
import requests
response = requests.get(...)
data = response.json()
它会自动检测使用哪个解码器。
解决方案 2:
您可以使用json.loads
:
import json
import requests
response = requests.get(...)
json_data = json.loads(response.text)
这会将给定的字符串转换为字典,使您可以在代码中轻松访问 JSON 数据。
或者您可以使用@Martijn 的有用建议和获得较高投票的答案response.json()
。
解决方案 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"]
注意因为这是一本词典,所以你应该注意关键的拼写和大小写,例如“total”与“Total”不同
解决方案 4:
解析来自请求库的 JSON 响应的最佳方法是什么?
最佳答案似乎显示了将 json 响应解析为 Python 对象的两种不同方法,但它们本质上是相同的。
response.json()
有两处不同:
如果您的环境中安装了 json 库,它将使用
simplejson
(这是Python 附带的外部维护的开发版本),但如果没有,它将使用内置库json
(源)。我认为过去 (当 Python 2 仍被广泛使用时)json
和之间存在性能差异,但现在这两个库之间几乎没有区别了。simplejson
如果响应没有编码(
response.encoding
为无),那么它会尝试猜测它并尝试使用猜测的编码(源)进行解码。
因此在 99.9999% 的情况下,response.json()
和json.loads(response.text)
将产生相同的字典。如果源 json 有一些奇怪的编码,它可能会有所不同。
解决方案 5:
如果不是 json
# pip install requests
import requests
r = requests.get(url)
try:
data = r.json()
except requests.JSONDecodeError:
content_type = r.headers.get('Content-Type')
print(content_type)
# r.encoding='utf-8'
# data = r.text
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理必备:盘点2024年13款好用的项目管理软件