如何用Python中的Flask压缩/最小化JSON/Jsonify的大小?

2024-05-16 11:53:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我经常向我的网页发送一个巨大的JSON字符串(jsonify在Flask中),所以我想减少数据量。最简单的选择可能是删除所有换行符和空格字符,但仅举一个例子:

正常值:361KB
删除所有换行符和空格字符:118KB(哇)。
压缩原始文件:35KB(double wow)。

所以我想知道是否有一种简单的方法可以接近35KB。到目前为止,我还没有找到一个可以用python和javascript轻松实现的解决方案(解压)。

现在,我每秒发送大约4-5MB的数据,你猜对了,这“有点”太多了。


Tags: 文件方法字符串json网页flaskjavascript字符
2条回答

老问题,但我正在搜索这个,这是谷歌的第一个结果。链接到Leon的答案有一个不适合烧瓶的解决方案,而且它是旧的。使用Python 3,现在我们可以用标准库(和Flask)在几行中完成所有工作:

from flask import make_response, json
import gzip

@app.route('/data.json')
def compress():
    very_long_content = [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]
    content = gzip.compress(json.dumps(very_long_content).encode('utf8'), 5)
    response = make_response(content)
    response.headers['Content-length'] = len(content)
    response.headers['Content-Encoding'] = 'gzip'
    return response

使用gzip.compress我们直接压缩了一个字节字符串,需要输入一个字节字符串。然后,作为Leon的链接,我们做了一个自定义的响应,说内容是一个gzip,这样浏览器将自行解压缩。

对于使用JQuery ajax请求的Javascript解码,与标准请求没有任何特别的区别:

$.ajax({
    url: '/data.json',
    dataType: 'json',
    success: function(data) {
        console.log(data);
    }
})

Web请求确实支持GZip,您可以用python实现它。

有人问了这个问题。 How to use Content-Encoding: gzip with Python SimpleHTTPServer

根据烧瓶压缩报告

The preferred solution is to have a server (like Nginx) automatically compress the static files for you.

但你可以在烧瓶里做。

如果您使用gzip路径,则不需要删除换行符和空白,但如果您仍然需要,则根据烧瓶文档,可以通过将JSONIFY_pretty print_REGULAR设置为false来禁用PRETTYPRINT。

相关问题 更多 >