簡體   English   中英

在燒瓶的 jsonify() 中縮小 JSON

[英]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_separatorkey_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM