2014-09-10 22 views
3

瓶提供了方便jsonify()函數,它返回從Python的變量JSON對象:精縮JSON在瓶中的jsonify()

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爲符合JSON的字符串)。

這縮進格式是一種浪費,對長期輸出,我更喜歡縮小的版本:

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

我怎樣才能獲得JSON從瓶的jsonify()縮小的版本?

+0

只需使用['json.dumps'(HTTPS: //docs.python.org/2/library/json.html#json.dumps)從標準庫嗎? (儘管這不是嚴格意義上的*縮小*,只是不太漂亮)。 – 2014-09-10 19:28:47

回答

6

只需將配置密鑰JSONIFY_PRETTYPRINT_REGULAR設置爲False - Flask漂亮 - 打印JSON,除非它是由AJAX請求(默認情況下)請求的。

+1

雖然這有助於刪除縮進等,但它仍然包含不必要的空格,例如:'[1,5,3]'而不是'[1,5,3]'。 – Jonatan 2015-08-13 14:34:28

+1

看到我的答案,Jonatan:http://stackoverflow.com/a/33048774/1423157 – robru 2015-10-09 23:59:25

8

除了對JSONIFY_PRETTYPRINT_REGULAR對方的回答,您還可以得到延長瓶的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

很好的感覺。謝謝。 – 2015-10-10 05:28:06

+3

不知道這是否適用於舊版本 - 但目前的版本並不需要。從flask doc(http://flask.pocoo.org/docs/0.12/api/):如果未請求使用X-Requested-With:XMLHttpRequest來簡化調試,則該函數的響應將被打印出來,除非JSONIFY_PRETTYPRINT_REGULAR配置參數設置爲false。壓縮(不漂亮)格式**當前意味着沒有縮進,分隔符後沒有空格**。 – lynnard 2017-03-30 09:40:41