首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >json.dumps打乱了订单

json.dumps打乱了订单
EN

Stack Overflow用户
提问于 2015-05-10 22:41:00
回答 5查看 36.2K关注 0票数 30

我正在使用

json模块

创建

包含类似条目的文件

json.dumps({"fields": { "name": "%s", "city": "%s", "status": "%s", "country": "%s" }})

但是,在

-file创建的字段顺序错误

{"fields": {"status": "%s", "city": "%s", "name": "%s", "country": "%s"}}

这是一个问题,因为

-strings现在是不正确的。

我如何才能强制

函数来保持给定的顺序?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 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。

票数 33
EN

Stack Overflow用户

发布于 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"}}'
票数 27
EN

Stack Overflow用户

发布于 2015-05-10 22:44:37

这是一本字典,字典不会保持秩序。您可以使用

OrderedDict

取而代之的是。

您还可以添加排序

_

keys=False参数:

json.dumps(values, sort_keys=False)
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30152688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档