Атрибут json класса TestResponse
Атрибут json применяется к объекту ответа
TestResponse, который возвращается
тестовым клиентом Flask при выполнении запроса.
Он содержит данные ответа, уже преобразованные
из JSON-строки в объекты Python: словари, списки,
числа, строки, булевы значения и None.
Если ответ не содержит валидного JSON, атрибут
возвращает None.
Атрибут json доступен только для чтения.
Он удобен при тестировании REST-эндпоинтов,
когда нужно проверить структуру и значения
JSON-ответа без ручного вызова json.loads.
Синтаксис
res.json
Пример
Давайте создадим простое Flask-приложение с эндпоинтом, возвращающим JSON:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/data')
def data():
return jsonify({'name': 'abcde', 'age': 25})
Теперь напишем тест, который обращается к этому
эндпоинту и читает атрибут json:
from app import app
client = app.test_client()
res = client.get('/api/data')
print(res.json)
Результат выполнения кода:
{'name': 'abcde', 'age': 25}
Пример
Давайте обратимся к конкретному ключу в распарсенном JSON:
from app import app
client = app.test_client()
res = client.get('/api/data')
print(res.json['name'])
Результат выполнения кода:
"abcde"
Пример
Давайте создадим эндпоинт, возвращающий JSON-массив:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/api/list')
def list_data():
return jsonify(['a', 'b', 'c', 'd', 'e'])
Проверим содержимое массива через атрибут
json:
from app import app
client = app.test_client()
res = client.get('/api/list')
print(res.json)
print(res.json[2])
Результат выполнения кода:
['a', 'b', 'c', 'd', 'e']
"c"
Пример
Если ответ не является JSON, атрибут json
вернёт None. Давайте убедимся в этом:
from flask import Flask
app = Flask(__name__)
@app.route('/plain')
def plain():
return 'hello'
Проверим атрибут json для такого ответа:
from app import app
client = app.test_client()
res = client.get('/plain')
print(res.json)
Результат выполнения кода:
None
Смотрите также
-
класс
TestResponse,
который представляет ответ тестового клиента -
метод
get_json,
который возвращает JSON-данные с дополнительными опциями -
атрибут
data,
который содержит тело ответа в виде байтов -
атрибут
content_type,
который хранит MIME-тип ответа