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

JSON对象中的项目使用“ json.dumps”乱序了吗?

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

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,名称,时区-但我却拥有时区,ID,名称。

我该如何解决?


问题答案:

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

从Python3.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),你可以传递object_pair_hook, 通过@FredYankowski的建议:

>>> 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 我得到的结果是: 我想有以下顺序的键:id,名称,时区-但我有时区,id,名称。 我该怎么解决这个问题?

  • 问题内容: 我正在使用json模块创建一个包含类似条目的文件 但是,在创建的-file文件中,字段顺序错误 这是一个问题,因为-strings的替换现在不正确。 如何强制功能保持给定顺序? 问题答案: 像其他答案正确指出的那样,在Python 3.6之前,字典是 无序的 。 就是说,JSON还应该具有 _无序_映射,因此原则上在JSON中存储有序字典没有多大意义。具体来说,这意味着在读取JSON对

  • 我想得到与我的素描相似的效果。 https://postimg.org/image/o03qu4tpp/ 男人总是应该放在头球的右下角。旋转木马应该在中间/中间-左边的位置(头部高度的50%)。 我在标题容器中添加了新类(pad4),并使用了flexbox。 adie-Content: flex-end; line-Item: flex-end; 现在,一个男人在左下角,文本在右上角。我现在不知道

  • 问题内容: 我正在尝试反序列化(使用gson)如下所示的JSON对象: 我该如何处理?我什至不知道该怎么称呼- 这里代表了多个“项目”,但这不是一个数组。当我尝试将其反序列化为数组时,程序在“预期的Begin_Array但找到Begin_Object”异常时崩溃。当我尝试将其反序列化为Strong对象时(请参见下面的类),程序将运行,但所有字段均返回null。 这是我尝试将其映射到的类: 完整的J

  • 问题内容: 我有一个与此对象类似的对象: 我试图得到它的长度,问题是返回5而不是3(这是它的总项目数)。该数组相对较长(有1000x2000个项目),并且必须每秒执行很多次。我如何才能更有效地获取商品数量? 问题答案: 显然,除了kieran的回答外,现代浏览器还具有功能。在这种情况下,您可以这样做:

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