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

Ric*_*ckD 232 python rest json python-requests

我正在使用python requests模块向服务器发送RESTful GET,我在JSON中得到响应.JSON响应基本上只是一个列表列表.

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

psw*_*han 410

由于您正在使用requests,您应该使用响应的json方法.

import requests

response = requests.get(...)
data = response.json()
Run Code Online (Sandbox Code Playgroud)

自动检测要使用的解码器.

  • 我有点好奇,现在的“数据”是列表列表还是字典。 (5认同)
  • @Krishna_Oza`data`反映了它正在阅读的JSON的结构.例如,如果响应是:`[{"a":{...}}]`,`data`是一个列表,其中`list [0] == {'a':{...}} `.如果响应是`{"a":"b","c":"d"}`,`data`是一个字典.这是否回答你的问题? (5认同)
  • 为此表示支持,因为我通常使用json.loads(response.text)方法,直到在一些大型json上发现使用respons.json()的速度比其他方法快得多。 (3认同)
  • 请记住它出现在v0.12和v1.0之间的某处,所以例如用于python-requests的Ubuntu 12.04 deb-package还没有这个功能(它是v0.8).你可以"pip安装请求",而不是使用deb包. (2认同)

Sim*_*ser 269

你可以使用json.loads:

import json
import requests

response = requests.get(...)
json_data = json.loads(response.text)
Run Code Online (Sandbox Code Playgroud)

这会将给定的字符串转换为字典,从而允许您在代码中轻松访问JSON数据.

  • 使用`response.json()`要好得多,因为它可以更好地找出所用的编码.(免责声明,我写了一些代码). (140认同)
  • 好的,但是每个元素仍然是unicode. (3认同)

Ama*_*ino 34

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

import requests

res = requests.get('https://reqres.in/api/users?page=2')
print(f'Total users: {res.json().get("total")}')
Run Code Online (Sandbox Code Playgroud)

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

json_res = res.json()
Run Code Online (Sandbox Code Playgroud)

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

json_res.get('total')
json_res["total"]
Run Code Online (Sandbox Code Playgroud)

注意因为这是一本字典,所以您应该注意关键拼写和大小写,即“total”与“Total”不同