2014-09-10 3 views
3

Колбы предлагает удобную jsonify() функцию, которая возвращает объект JSON из переменных Python:уменьшенная JSON в jsonify колбы (в)

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 в уменьшенной версии от Колба-х jsonify()?

+0

Просто используйте [ 'json.dumps'] (https: //docs.python.org/2/library/json.html#json.dumps) из стандартной библиотеки? (Хотя это не так, строго говоря, * minified *, просто не очень печатная). –

ответ

6

Просто установите ключ конфигурации JSONIFY_PRETTYPRINT_REGULAR на номер False - флажок красиво распечатывает JSON, если он не запрошен запросом AJAX (по умолчанию).

+1

Хотя это помогает, удаляя отступы и т. Д., Он по-прежнему включает ненужные пробелы, например: '[1, 5, 3]' вместо '[1,5,3]'. – Jonatan

+1

См. Мой ответ, Джонатан: http://stackoverflow.com/a/33048774/1423157 – robru

8

В дополнении к другому ответу JSONIFY_PRETTYPRINT_REGULAR, вы можете также избавиться от пробелов между элементами списка по jsonencoder EXTENDING колбы, как и так:

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() по другим причинам, так или иначе)

+1

Приятное прикосновение. Благодарю. –

+3

Не уверен, что это для старой версии - но это не требуется в текущей версии фляжки. Из флагового документа (http://flask.pocoo.org/docs/0.12/api/): Ответ этой функции будет довольно печатным, если он не был запрошен с помощью X-Requested-With: XMLHttpRequest для упрощения отладки, если параметр конфигурации JSONIFY_PRETTYPRINT_REGULAR установлено значение false. Сжатое (не очень) форматирование ** в настоящее время означает отсутствие отступов и пробелов после разделителей **. – lynnard

Смежные вопросы