Атрибут json
Атрибут json применяется к приложению
Flask и предоставляет доступ к JSON-провайдеру,
который Flask использует для сериализации данных
в JSON. Атрибут хранит объект с настройками,
метод dumps для преобразования Python-данных
в строку JSON и метод loads для обратного
преобразования строки JSON в Python-данные.
По умолчанию Flask настраивает провайдер через
класс DefaultJSONProvider, но вы можете
заменить его своим провайдером, если требуется
нестандартная сериализация. Например, можно
настроить сортировку ключей, отступы, работу
с кириллицей или добавить поддержку собственных
типов.
Синтаксис
app.json
app.json.dumps(obj)
app.json.loads(string)
Пример
Давайте сериализуем словарь в JSON-строку
через атрибут json:
from flask import Flask
app = Flask(__name__)
with app.app_context():
data = {'name': 'user', 'age': 25}
res = app.json.dumps(data)
print(res)
Результат выполнения кода:
{"name": "user", "age": 25}
Пример
Давайте выполним обратное преобразование JSON-строки в Python-объект:
from flask import Flask
app = Flask(__name__)
with app.app_context():
json_str = '{"name": "user", "age": 25}'
res = app.json.loads(json_str)
print(res)
Результат выполнения кода:
{'name': 'user', 'age': 25}
Пример
Давайте настроим сортировку ключей при сериализации через настройки провайдера:
from flask import Flask
app = Flask(__name__)
app.json.sort_keys = True
with app.app_context():
data = {'b': 2, 'a': 1, 'c': 3}
res = app.json.dumps(data)
print(res)
Результат выполнения кода:
{"a": 1, "b": 2, "c": 3}
Пример
Давайте вернём JSON-ответ из маршрута,
используя возможности атрибута json:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return jsonify({'message': 'hello', 'items': [1, 2, 3]})
Результат выполнения кода для адреса /:
{"items": [1, 2, 3], "message": "hello"}