Сокращенный JSON в jsonify колбы ()
Настой предлагает удобный jsonify()
функция, которая возвращает объект JSON из переменных Python:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route("/")
def json_hello():
return jsonify({x:x*x for x in range(5)}), 200
if __name__ == "__main__":
app.run(debug=True)
Который возвращает:
{
"0": 0,
"1": 1,
"2": 4,
"3": 9,
"4": 16
}
(PS - обратите внимание на преобразование из int в строку для соответствия JSON).
Этот формат с отступами бесполезен для длинных выходных данных, и я предпочитаю уменьшенную версию:
{"1": 1, "0": 0, "3": 9, "2": 4, "4": 16}
Как я могу получить JSON в минимизированной версии от Flask's jsonify()
?
3 ответа
Просто установите ключ конфигурации JSONIFY_PRETTYPRINT_REGULAR
в False
- Flask Pretty-печатает JSON, если это не запрашивается AJAX-запросом (по умолчанию).
В дополнение к другому ответу JSONIFY_PRETTYPRINT_REGULAR
Вы также можете избавиться от пробелов между элементами списка, расширив jsonencoder от flask, вот так:
from flask import Flask
from flask.json import JSONEncoder
class MiniJSONEncoder(JSONEncoder):
"""Minify JSON output."""
item_separator = ','
key_separator = ':'
app = Flask(__name__)
app.json_encoder = MiniJSONEncoder
app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
Значения по умолчанию для item_separator
а также key_separator
у каждого есть завершающий пробел, поэтому, переопределив их таким образом, вы удалите эти пробелы из вывода.
(строго говоря, я полагаю, вы могли бы просто установить эти значения по умолчанию JSONEncoder
но мне нужен был такой подход, так как мне пришлось перегружать JSONEncoder.default()
по другим причинам в любом случае)
Flask 1.1 добавит отступы и пробелы в вывод jsonify(), если
current_app.config["JSONIFY_PRETTYPRINT_REGULAR"]
является
True
(
False
по умолчанию) или приложение находится в режиме отладки.
indent = None
separators = (",", ":")
if current_app.config["JSONIFY_PRETTYPRINT_REGULAR"] or current_app.debug:
indent = 2
separators = (", ", ": ")