为了账号安全,请及时绑定邮箱和手机立即绑定

JSON对象中的项目是否使用“json.ddump”出现故障?

JSON对象中的项目是否使用“json.ddump”出现故障?

jeck猫 2019-12-19 18:13:11
JSON对象中的项目是否使用“json.ddump”出现故障?我在用json.dumps转换成jsoncountries.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-但我有时区、id、name。我该怎么解决这个问题?
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

双Pythondict(在Python3.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}'

自Python 3.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

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



查看完整回答
反对 回复 2019-12-20
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

字典的顺序与它所定义的顺序没有任何关系。所有字典都是这样,而不仅仅是那些变成JSON的字典。

>>> {"b": 1, "a": 2}{'a': 2, 'b': 1}

事实上,这本字典还没到,就被翻了个底朝天。json.dumps:

>>> {"id":1,"name":"David","timezone":3}{'timezone': 3, 'id': 1, 'name': 'David'}


查看完整回答
反对 回复 2019-12-20
  • 3 回答
  • 0 关注
  • 296 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信