当前位置: 首页 > 面试题库 >

json.dumps弄乱顺序

沈凯康
2023-03-14
问题内容

我正在使用json模块创建一个json包含类似条目的文件

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

但是,在json创建的-file文件中,字段顺序错误

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

这是一个问题,因为%s-strings的替换现在不正确。

如何强制dumps功能保持给定顺序?


问题答案:

像其他答案正确指出的那样,在Python 3.6之前,字典是 无序的

就是说,JSON还应该具有 _无序_映射,因此原则上在JSON中存储有序字典没有多大意义。具体来说,这意味着在读取JSON对象时,返回键的顺序可以是任意的。

因此,在JSON中保留映射顺序(例如PythonOrderedDict)的一种好方法是输出一个(键,值)对的数组,您在读取时将其转换回有序映射:

>>> 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

(请注意,从(键,值)对的 列表 构造有序字典的方式:OrderedDict({1: 10, 2: 20})将不起作用:它的键不一定像字典文字中那样是有序的,因为该文字创建了一个Python字典,其键是无序的。)

PS :从Python
3.1开始,json模块提供了一个挂钩,用于自动将成对的列表(如上)转换为其他类似OrderedDict的对象。



 类似资料:
  • 问题内容: JPanel初始化 调用方法 在我的框架看起来像这样之前,http://i.imgur.com/XQlQeul.png 然后看起来像这样,http://i.imgur.com/RnVuUzt.png 我在想我的方法有错误,但是我似乎无法解决问题。有人知道发生了什么吗?我想要的结果将是第一张图片,但已被绘制。 问题答案: 您在执行任何自定义绘画之前未先致电就中断了绘画链 如果是共享资源,

  • 本文向大家介绍python json.dumps中文乱码问题解决,包括了python json.dumps中文乱码问题解决的使用技巧和注意事项,需要的朋友参考一下 json.dumps(var,ensure_ascii=False)并不能解决中文乱码的问题 json.dumps在不同版本的Python下会有不同的表现, 注意下面提到的中文乱码问题在Python3版本中不存在。 注:下面的代码再py

  • 问题内容: 我使用Python编写代码,我非常喜欢Notepad 。但是,当我使用制表符进行缩进时,在Notepad 中看起来很晚,但是当我运行该程序时,出现了缩进错误,并且当我在Emacs中检查代码时,我发现Notepad ++实际上增加了比制表符更多的空格。它显示在屏幕上。怎么了? 问题答案: 没有通用的制表符大小,因此我始终确保用空格替换制表符(因此您知道所看到的就是在其他任何地方都可以看到

  • 问题内容: 我有这个非常奇怪的问题。我有一个包含一些德语字母的网站,当它只是不带php的html时,当我将符号更改为UTF-8时,符号将显示为带有编码的属性,它们不会显示,而不是Ö。当我将html放入php并在Wamp上使用Zenset studio以charset = iso-8859-1编码启动时,得到�而不是Ö(我想补充一下,这个Ö是单选按钮的值) 。当它在一个 标签以正确显示。您能告诉

  • 问题内容: 我用来转换成json之类的 我得到的结果是: 我想按以下顺序获取键:ID,名称,时区-但我却拥有时区,ID,名称。 我该如何解决? 问题答案: Python (在Python 3.7之前)和JSON对象都是无序集合。您可以传递参数来对键进行排序: 如果您需要特定的订单;您可以使用: 从Python3.6开始,关键字参数顺序得以保留,并且可以使用更好的语法重写以上内容: 请参阅PEP 4

  • 问题内容: 我有以下数据框: 我想根据预期的输出更改列的顺序: 我对行的索引不感兴趣。 我已经尝试过以下基于其他stackoverflow / google帖子的代码: 这样可以正确地更改索引,但是其他所有列都可以获取值 我也尝试过: 这样可以正确更改索引,但其他列不会切换,因此会弄乱数据框。 也: 但这无济于事。 我该如何工作? 问题答案: 对于需要创建索引列: 或使用有序分类: