我正在使用
json模块
创建
包含类似条目的文件
json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }})
但是,在
-file创建的字段顺序错误
{"fields": {"status": "%s", "city": "%s", "name": "%s", "country": "%s"}}
这是一个问题,因为
-strings现在是不正确的。
我如何才能强制
函数来保持给定的顺序?
发布于 2015-05-10 22:51:12
与其他答案一样,在Python 3.6之前,字典是
无序
..。
也就是说,
JSON还应该有
无序
映射
,所以原则上,在JSON中存储有序字典没有多大意义。具体地说,这意味着在读取JSON对象时,返回的键的顺序可以是任意的。
因此,在JSON中保持映射顺序(如Python键)的一个好方法是输出一个(OrderedDict,value)对数组,您可以在阅读时将其转换回有序映射:
>>> from collections import OrderedDict
>>> import json
>>> d = OrderedDict([(1, 10), (2, 20)])
>>> print d[2]
20
>>> json_format = json.dumps(d.items())
>>> print json_format # Order maintained
[[1, 10], [2, 20]]
>>> OrderedDict(json.loads(json_format)) # Reading from JSON: works!
OrderedDict([(1, 10), (2, 20)])
>>> _[2] # This works!
20
(请注意,有序字典是从
列表
(key,value)对的:
不起作用:它的键不一定像字典文字中那样排序,因为文字创建了一个Python字典,它的键是无序的。)
PS
:从Python 3.1开始,json模块
提供了一个钩子
用于自动将配对列表(如上面的)转换为其他内容,如OrderedDict。
发布于 2017-04-27 00:59:18
你可以选择
将被使用,而不是普通的
在创建json对象以记住插入顺序时:
>>> from collections import OrderedDict
>>> a = '{"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }}'
>>> b = json.loads(a, object_pairs_hook=OrderedDict)
>>> json.dumps(b)
'{"fields": {"name": "%s", "city": "%s", "status": "%s", "country": "%s"}}'
发布于 2015-05-10 22:44:37
这是一本字典,字典不会保持秩序。您可以使用
OrderedDict
取而代之的是。
您还可以添加排序
_
keys=False参数:
json.dumps(values, sort_keys=False)
https://stackoverflow.com/questions/30152688
复制相似问题