防止Flask jsonify对数据进行排序

Ath*_*ran 23 python json flask

每次使用时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)
Run Code Online (Sandbox Code Playgroud)

jua*_*aga 41

是的,您可以使用以下config属性进行修改:

app = Flask(__name__)
app.config['JSON_SORT_KEYS'] = False
Run Code Online (Sandbox Code Playgroud)

但请注意,在文档中明确警告:

默认情况下,Flask将以订购密钥的方式序列化JSON对象.这样做是为了确保独立于字典的散列种子,返回值将是一致的,不会丢弃外部HTTP缓存.您可以通过更改此变量来覆盖默认行为.不建议这样做,但可能会提高可缓存性成本的性能.

  • 应该注意的是,从 Python 3.6 开始,字典保留了它们的插入顺序,因此文档中的参数在一般意义上不再适用。 (6认同)
  • 我认为答案应该更新,因为这是@hynek 的一个重要旁注。 (3认同)

小智 5

JSON_SORT_KEYS已接受答案中的配置选项在 Flask 2.2 中已弃用,并在 Flask 2.3 中被删除。

从 Flask 2.2 开始,禁用排序的推荐方法app.json是通过提供程序:

app = Flask(__name__)
app.json.sort_keys = False
Run Code Online (Sandbox Code Playgroud)