Класс JSONProvider
Класс JSONProvider применяется для настройки
преобразования данных в формат JSON и обратно.
Он отвечает за сериализацию объектов Python в JSON-строку
и десериализацию JSON-строки в объекты Python.
Экземпляр класса хранится в атрибуте app.json.
По умолчанию Flask использует встроенную реализацию
DefaultJSONProvider, основанную на модуле
json стандартной библиотеки.
Класс предоставляет методы dumps, loads
и response, а также атрибуты ensure_ascii,
sort_keys и compact для управления
форматированием вывода. Заменить провайдер можно,
присвоив новое значение атрибуту app.json
или создав собственный подкласс.
Синтаксис
from flask.json.provider import DefaultJSONProvider
app.json = DefaultJSONProvider(app)
Атрибуты
Класс DefaultJSONProvider имеет следующие
настраиваемые атрибуты:
ensure_ascii - если True, все
не-ASCII символы экранируются последовательностями
\uXXXX. По умолчанию True.
sort_keys - если True, ключи словаря
сортируются по алфавиту при сериализации.
По умолчанию True.
compact - если None, формат вывода
определяется настройкой app.config["JSONIFY_PRETTYPRINT_REGULAR"].
Если True, вывод будет компактным,
если False - с отступами.
Пример
Давайте посмотрим, как Flask сериализует словарь в JSON-ответ по умолчанию:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def index():
res = {'name': 'abcde', 'age': 25}
return jsonify(res)
Результат выполнения кода для адреса /:
{"age":25,"name":"abcde"}
Пример
Давайте настроим провайдер так, чтобы ключи не сортировались и вывод был с отступами:
from flask import Flask, jsonify
from flask.json.provider import DefaultJSONProvider
app = Flask(__name__)
class MyProvider(DefaultJSONProvider):
sort_keys = False
app.json = MyProvider(app)
app.json.compact = False
@app.route('/')
def index():
res = {'name': 'abcde', 'age': 25}
return jsonify(res)
Результат выполнения кода для адреса /:
{
"name": "abcde",
"age": 25
}
Пример
Давайте воспользуемся методом dumps напрямую
для сериализации объекта:
from flask import Flask
app = Flask(__name__)
with app.app_context():
res = app.json.dumps({'name': 'abcde'})
print(res)
Результат выполнения кода:
'{"name": "abcde"}'
Пример
Давайте воспользуемся методом loads
для десериализации JSON-строки:
from flask import Flask
app = Flask(__name__)
with app.app_context():
res = app.json.loads('{"name": "abcde"}')
print(res)
Результат выполнения кода:
{'name': 'abcde'}