精缩JSON在瓶中的jsonify()

问题描述:

瓶提供了方便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

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

+1

虽然这有助于删除缩进等,但它仍然包含不必要的空格,例如:'[1,5,3]'而不是'[1,5,3]'。 – Jonatan 2015-08-13 14:34:28

+1

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

除了对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