首页 > 解决方案 > 如何保持传递给 jsonify() 函数的排序字典的顺序?

问题描述

我正在尝试将排序的字典传递给 jsonify() 函数,然后在 JS 代码中使用它来取出值。我看到的是,即使我传递了正确的值,由于某种原因它们被 jsonify 重新排序。


json_data = {
    "11": {
        "j_id": "out",
    },
    "aa": {
        "j_id": "in",
    },
    "bb": {
        "j_id": "out",
    },
}

jkeys=json_data.keys()
sorted_json = sorted(jkeys, key=lambda x: json_data[x]['j_id'], reverse=False)

new_sorted=OrderedDict()
for rec in sorted_json:
    new_sorted[rec]=json_data[rec]

print('sort dict: {}'.format(new_sorted))

输出是正确的,我可以看到正确的值,在我的情况下应该是:aa, 11, bb

>>> from collections import OrderedDict
>>>
>>> json_data = {
...     "11": {
...         "j_id": "out",
...     },
...     "aa": {
...         "j_id": "in",
...     },
...     "bb": {
...         "j_id": "out",
...     },
... }
>>>
>>> jkeys=json_data.keys()
>>> sorted_json = sorted(jkeys, key=lambda x: json_data[x]['j_id'], reverse=False)
>>>
>>> new_sorted=OrderedDict()
>>> for rec in sorted_json:
...     new_sorted[rec]=json_data[rec]
...
>>> print('sort dict: {}'.format(new_sorted))
sort dict: OrderedDict([('aa', {'j_id': 'in'}), ('11', {'j_id': 'out'}), ('bb', {'j_id': 'out'})])

不幸的是,当我将它传递给 jsonify() 函数,然后例如 console.log() 输出烧瓶数据时,顺序变成这样:11,aa,bb。除此之外,我做了一些研究并找到了这个stackoverflow 答案,导致了一些很好的文档说明,其中明确指出不推荐将JSON_SORT_KEYS设置为False 。然后我检查了这个 github 问题,似乎问题在烧瓶中没有完全解决。

在我的情况下解决它的最佳方法是什么?

标签: pythonflask

解决方案


在应用定义之后将此配置行添加到您的代码中:

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

推荐阅读