Сокращенный 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 = (", ", ": ")
Другие вопросы по тегам