json.loads()没有保持秩序

shu*_*rok 6 python json python-2.7

我已将格式化我的字符串看起来像JSON我可以做到的json.loads.当我在屏幕上打印时,它结果搞砸了订单.我知道Python的dictonaries没有订购,但有没有办法保持这个顺序?我真的需要保留它.谢谢!

Wil*_*sem 14

JSON和Python字典(那些都是JSON对象)都是无序的.所以实际上这样做没有任何意义,因为JSON编码器可以改变顺序.

但是,您可以定义自定义JSON解码器,然后使用该解码器解析它.所以这里的字典钩子将是OrderedDict:

from json import JSONDecoder
from collections import OrderedDict

customdecoder = JSONDecoder(object_pairs_hook=OrderedDict)
Run Code Online (Sandbox Code Playgroud)

然后你可以解码:

customdecoder.decode(your_json_string)
Run Code Online (Sandbox Code Playgroud)

因此,这将把项目存储在OrderedDict一个字典而不是字典中.但要注意 - 如前所述 - JSON对象的键顺序是未指定的.

或者,您也可以将钩子传递给loads函数:

from json import loads
from collections import OrderedDict

loads(your_json_string, object_pairs_hook=OrderedDict)
Run Code Online (Sandbox Code Playgroud)

更新:从,字典保留了插入顺序.因此,如果使用,标准json.load并且json.loads应该可以正常工作.但请注意,JSON对象仍然是无序的,因此JavaScript端可以按任何顺序加载/转储对象.

  • 怎么样`json.loads(string,object_pairs_hook_ = OrderedDict)`? (2认同)
  • 从 3.7 开始,Python 字典是有序的 (2认同)