Сообщить об ошибке.

Получение и отправка данных в виде JSON с модулем requests в Python

Response.json и аргумент json метода equests.post() модуля requests

Получение контента в виде JSON.

Модуль requests имеет встроенный декодер JSON, на случай, если ответ приходит в виде данных JSON:

>>> import requests
# отправка GET-запроса
>>> resp = requests.get('https://api.github.com/events')
# получение данных в виде JSON
>>> resp.json()
# [{'repository': {'open_issues': 0, 'url': 'https://github.com/...

В случае сбоя декодирования JSON, метод resp.json() вызывает исключение. Например, если ответ получает 204 (без содержимого) или если ответ содержит недопустимый формат JSON , то попытка вызова метода resp.json() вызывает исключение simplejson.JSONDecodeError, если установлен simplejson, или вызывает ValueError.

Следует отметить, что успех вызова метод resp.json() не указывает на успех ответа. Некоторые серверы могут возвращать объект JSON при неудачном ответе (например, сведения об ошибке с HTTP 500). Такой JSON будет декодирован и возвращен. Чтобы проверить успешность запроса, используйте resp.raise_for_status() или проверьте resp.status_code.

Передача данных в виде JSON.

Модуль requests может отправлять данные в формате JSON. Если аргументу data метода requests.post() передать строку, вместо словаря dict, то эти данные будут отправлены непосредственно.

Например, GitHub API v3 принимает JSON-кодированные данные, методами POST/PATCH:

>>> import requests
>>> import json
# целевой URL-адрес
>>> url = 'https://api.github.com/some/endpoint'
# данные в виде словаря
>>> param = {'some': 'data'}
# кодируем словарь в формат JSON
>>> json_param = json.dumps(param)
# отправка POST-запроса с данными в формате JSON
>>> resp = requests.post(url, data=json_param)

Вместо того чтобы кодировать словарь самостоятельно, также можно передать его непосредственно с помощью аргумента json метода requests.post() (добавленного в версии 2.4.2), и данные автоматически преобразуются в формат JSON:

>>> import requests
# целевой URL-адрес
>>> url = 'https://api.github.com/some/endpoint'
# данные в виде словаря
>>> param = {'some': 'data'}
>>> resp = requests.post(url, json=param)

Обратите внимание, что аргумент json будет игнорироваться, если одновременно используется аргумент data или file.

Использование аргумента json в запросе requests.post() изменит заголовок Content-Type на application/json.