烧瓶的jsonify()中的缩小JSON

Ada*_*tan 4 python json minify flask

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)
Run Code Online (Sandbox Code Playgroud)

哪个回报:

{
  "0": 0, 
  "1": 1, 
  "2": 4, 
  "3": 9, 
  "4": 16
}
Run Code Online (Sandbox Code Playgroud)

(PS - 注意从int到string的转换以符合JSON).

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

{"1": 1, "0": 0, "3": 9, "2": 4, "4": 16}
Run Code Online (Sandbox Code Playgroud)

如何从Flask中获得缩小版本的JSON jsonify()

rob*_*bru 13

除了另一个答案之外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
Run Code Online (Sandbox Code Playgroud)

为默认值item_separator,并key_separator各有一个尾随的空间,因此通过重写他们这样,你从输出中删除那些空间.

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

  • 不确定这是否适用于旧版本 - 但目前的烧瓶版本不需要这样做.来自flask doc(http://flask.pocoo.org/docs/0.12/api/):如果未使用X-Requested-With请求,则此函数的响应将被打印:XMLHttpRequest简化调试,除非JSONIFY_PRETTYPRINT_REGULAR配置参数设置为false.压缩(不漂亮)格式**目前意味着没有缩进,分隔符后没有空格**. (5认同)

Sea*_*ira 8

只需将配置键设置JSONIFY_PRETTYPRINT_REGULARFalse- Flask漂亮打印JSON,除非AJAX请求(默认情况下)请求它.