防止 Flask jsonify 对数据进行排序

Posted

技术标签:

【中文标题】防止 Flask jsonify 对数据进行排序【英文标题】:Prevent Flask jsonify from sorting the data 【发布时间】:2017-09-01 23:12:03 【问题描述】:

每次我使用jsonify 时,我都会得到按字母顺序排序的 JSON 键。我不希望对键进行排序。我可以禁用jsonify中的排序吗?

from flask import request, jsonify

@app.route('/', methods=['POST'])
def index():
    json_dict = request.get_json()
    user_id = json_dict['user_id']
    permissions = json_dict['permissions']
    data = 'user_id': user_id, 'permissions': permissions
    return jsonify(data)

【问题讨论】:

为什么不想要排序数据?它的结构仍然相同,没有太大区别。 是的,您不会碰巧依赖 JSON 中的键顺序,是吗? 因为我想知道这是否可以实现,因为我想探索并且相当迂腐 如果你传入一个字典,它已经有未定义的顺序,所以没有办法得到“发送的值”。 好吧,根据the spec,本着迂腐的精神,JSON 对象是无序集合 【参考方案1】:

是的,您可以使用config 属性修改它:

app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False

但是,请注意,documentation 中明确警告了这一点:

默认情况下,Flask 将序列化 JSON 对象的方式是键 被订购。这样做是为了确保独立于 字典的哈希种子,返回值将保持一致 垃圾外部 HTTP 缓存。您可以通过以下方式覆盖默认行为 改变这个变量。不建议这样做,但可能会给您一个 以可缓存性为代价提高性能。

【讨论】:

应该注意的是,从 Python 3.6 开始,dicts 保留了它们的插入顺序,因此文档中的参数在一般意义上不再适用。 我认为应该更新答案,因为这是@hynek 的重要旁注。 @hynek 似乎仍然适用于我在 python v3.7.3 和 Flask v1.1.1 上的版本 没有人说它不再起作用了;只是现在对文档引用中的键进行排序的理由是零。留在那里可能会让新用户感到困惑。 @hynek 我需要我的 dict 基于键以相反的顺序排列..所以我做同样的事情并返回响应..但是当通过 jsonify 传递时,它返回到相同的顺序。我该如何克服这个问题?

以上是关于防止 Flask jsonify 对数据进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Flask 中字典数据返回(jsonify)

jsonify Flask中的SQLAlchemy结果集[重复]

Flask 框架 重定向,捕获异常,钩子方法及使用jsonify在网页返回json数据

Flask 学习-8. jsonify返回中文没正常显示问题

Flask 学习-6. jsonify()返回JSON格式数据

在flask中使用jsonify和json.dumps的区别