JSON 对象中的项目是否使用“json.dumps”出现故障?

问题描述

Python dict(Python 3.7 之前)和 JSON 对象都是无序集合。您可以传递sort_keys参数,对键进行排序:

>>> import json
>>> json.dumps({'a': 1, 'b': 2})
'{"b": 2, "a": 1}'
>>> json.dumps({'a': 1, 'b': 2}, sort_keys=True)
'{"a": 1, "b": 2}'

如果您需要特定的订单;你可以使用collections.OrderedDict

>>> from collections import OrderedDict
>>> json.dumps(OrderedDict([("a", 1), ("b", 2)]))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict([("b", 2), ("a", 1)]))
'{"b": 2, "a": 1}'

从 Python 3.6 开始,保留了关键字参数顺序,并且可以使用更好的语法重写上述内容:

>>> json.dumps(OrderedDict(a=1, b=2))
'{"a": 1, "b": 2}'
>>> json.dumps(OrderedDict(b=2, a=1))
'{"b": 2, "a": 1}'

请参阅PEP 468 - 保留关键字参数顺序

如果您的输入以 JSON 形式给出,那么为了保留顺序(获取OrderedDict),您可以通过@Fred Yankowski 的object_pair_hook建议 :

>>> json.loads('{"a": 1, "b": 2}', object_pairs_hook=OrderedDict)
OrderedDict([('a', 1), ('b', 2)])
>>> json.loads('{"b": 2, "a": 1}', object_pairs_hook=OrderedDict)
OrderedDict([('b', 2), ('a', 1)])

解决方法

我正在使用json.dumps转换为 json 之类的

countries.append({"id":row.id,"name":row.name,"timezone":row.timezone})
print json.dumps(countries)

我得到的结果是:

[
   {"timezone": 4,"id": 1,"name": "Mauritius"},{"timezone": 2,"id": 2,"name": "France"},{"timezone": 1,"id": 3,"name": "England"},{"timezone": -4,"id": 4,"name": "USA"}
]

我想按以下顺序使用键:id、name、timezone - 但我有 timezone、id、name。

我应该如何解决这个问题?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...