烧瓶的jsonify()中的缩小JSON

时间:2014-09-10 19:25:28

标签: python json flask minify

Flask提供了方便的jsonify()函数,它从Python变量中返回一个JSON对象:

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到string的转换以符合JSON)。

这种缩进格式对于长输出是浪费的,我更喜欢缩小版本:

{"1": 1, "0": 0, "3": 9, "2": 4, "4": 16}

如何从Flask的jsonify()获取缩小版本的JSON?

3 个答案:

答案 0 :(得分:12)

除了JSONIFY_PRETTYPRINT_REGULAR的另一个答案之外,您还可以通过扩展flask的jsonencoder来消除列表元素之间的空格,如下所示:

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_separatorkey_separator的默认值各有一个尾随空格,因此通过像这样覆盖它们,可以从输出中删除这些空格。

(严格来说,我认为您可以在默认JSONEncoder上设置这些值,但我需要这种方法,因为我不得不因其他原因而重载JSONEncoder.default()

答案 1 :(得分:7)

只需将配置键JSONIFY_PRETTYPRINT_REGULAR设置为False - 除非AJAX请求(默认情况下)请求,否则Flask会打印JSON。

答案 2 :(得分:0)

如果 current_app.config["JSONIFY_PRETTYPRINT_REGULAR"]True(默认为 False)或应用程序处于调试模式,Flask 1.1 将在 jsonify() 输出中添加缩进和空格。

indent = None
separators = (",", ":")

if current_app.config["JSONIFY_PRETTYPRINT_REGULAR"] or current_app.debug:
    indent = 2
    separators = (", ", ": ")