我使用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。
我该怎么解决?
正如其他人所提到的,根本的格言是无序的。然而,python中有OrderedDict对象。(它们是在最近的Python中构建的,或者您可以使用这个:http://code.activestate.com/recipes/576693/)。
我相信较新的pythons json实现正确地处理了内置的OrderedDicts,但我不确定(而且我也不容易进行测试)。
旧的pythons simplejson实现不能很好地处理orderedict对象。。在输出之前把它们转换成规则的指令。。但您可以通过执行以下操作来克服此问题:
现在使用这个我们得到:
这是非常理想的。
另一种选择是专门化编码器,直接使用row类,然后就不需要任何中间dict或无序的dict了。
Python
dict
(在Python 3.7之前)和JSON对象都是无序集合。您可以通过sort_keys
参数对键进行排序:如果您需要特定的顺序,您可以use ^{} :
Since Python 3.6,保留关键字参数顺序,并且可以使用更好的语法重写上面的内容:
见PEP 468 – Preserving Keyword Argument Order。
如果输入是JSON,那么为了保持顺序(获得
OrderedDict
),可以传递object_pair_hook
,as suggested by @Fred Yankowski:字典的顺序与定义它的顺序没有任何关系。所有字典都是这样,而不仅仅是那些转换成JSON的字典。
事实上,字典在到达
json.dumps
之前就被“颠倒”了:相关问题 更多 >
编程相关推荐