Python 烧瓶中的小型JSON';s jsonify()

Python 烧瓶中的小型JSON';s jsonify(),python,json,flask,minify,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"

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的精简版本?

只需将配置键设置为
False
-Flask PRETTYPRINT打印JSON,除非它是由AJAX请求请求的(默认情况下)。

除了
jsonify\u PRETTYPRINT\u常规的另一个答案之外,您还可以通过扩展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\u separator
key\u separator
的默认值都有一个尾随空格,因此通过这样覆盖它们,可以从输出中删除这些空格


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

如果
当前的应用程序配置[“jsonify\u PRETTYPRINT\u REGULAR”],Flask 1.1将向jsonify()输出添加缩进和空格
True
(默认情况下为
False
)或应用程序处于调试模式

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

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

只是从标准库中使用?(虽然严格来说,这不是缩小,只是打印不美观)。虽然这有助于消除缩进等,但它仍然包含不必要的空白,例如:
[1,5,3]
而不是
[1,5,3]
。不确定这是否适用于旧版本,但从当前版本来看,这是不需要的。From flask doc():如果未使用X-request-with:XMLHttpRequest请求此函数,则此函数的响应将被打印出来,以简化调试,除非JSONIFY_PRETTYPRINT_REGULAR config参数设置为false。压缩(不美观)格式目前意味着分隔符后没有缩进和空格。