[英]Minified JSON in flask's jsonify()
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?
除了JSONIFY_PRETTYPRINT_REGULAR
的其他答案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_separator
和key_separator
的默认值每个都有一个尾随空格,因此通过像这样覆盖它们,您可以从输出中删除这些空格。
(严格来说,我想你可以在默认的JSONEncoder
上设置这些值,但我需要这种方法,因为无论如何我不得不因其他原因重载JSONEncoder.default()
)
只需将配置键JSONIFY_PRETTYPRINT_REGULAR
设置为False
- Flask 会漂亮地打印 JSON,除非它是由 AJAX 请求(默认情况下)请求的。
如果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 = (", ", ": ")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.