What's the best way to parse a JSON response from the requests library?
Какой лучший способ проанализировать ответ JSON из библиотеки запросов?
Я использую requests модуль python для отправки RESTful GET на сервер, для которого я получаю ответ в формате JSON. Ответ JSON - это, по сути, просто список списков.
Какой лучший способ принудительно передать ответ собственному объекту Python, чтобы я мог либо повторить, либо распечатать его с помощью pprint?
Переведено автоматически
Ответ 1
Поскольку вы используете requests, вам следует использовать метод ответа json.
import requests
response = requests.get(...) data = response.json()
Это преобразует заданную строку в словарь, который позволяет вам легко получить доступ к вашим данным 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() отличается в двух местах:
он использует simplejson (которая является поддерживаемой извне версией библиотеки json для разработки, входящей в состав Python), если она установлена в вашей среде, но использует встроенную json, если нет (исходный код). Я думаю, что раньше была разница в производительности между json и simplejson в прошлом (когда Python 2 все еще широко использовался), но теперь разницы между библиотеками почти нет.
если ответ не имеет кодировки (response.encoding отсутствует), то он пытается угадать ее и попытаться декодировать, используя угаданную кодировку (исходный код).
Таким образом, в 99,9999% случаев response.json() и json.loads(response.text) выдадут один и тот же словарь. Он может отличаться, если исходный json имеет какую-то странную кодировку.