防止 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 对数据进行排序的主要内容,如果未能解决你的问题,请参考以下文章
jsonify Flask中的SQLAlchemy结果集[重复]
Flask 框架 重定向,捕获异常,钩子方法及使用jsonify在网页返回json数据
Flask 学习-8. jsonify返回中文没正常显示问题