<分区>
我已将我的字符串格式化为看起来像 JSON
,这样我就可以对其执行 json.loads
。当我在屏幕上打印时,结果弄乱了顺序。我知道 Python 字典没有排序,但是有什么方法可以保持这个顺序吗?我真的需要保留它。谢谢!
标签 python json python-2.7
<分区>
我已将我的字符串格式化为看起来像 JSON
,这样我就可以对其执行 json.loads
。当我在屏幕上打印时,结果弄乱了顺序。我知道 Python 字典没有排序,但是有什么方法可以保持这个顺序吗?我真的需要保留它。谢谢!
最佳答案
JSON 和 Python 字典(它们是 JSON 对象)都是无序的。所以实际上这样做没有任何意义,因为 JSON 编码器可以改变顺序。
然而,您可以定义自定义 JSON 解码器,然后使用该解码器解析它。所以这里的字典钩子(Hook)将是一个 OrderedDict
:
from json import JSONDecoder
from collections import OrderedDict
customdecoder = JSONDecoder(object_pairs_hook=OrderedDict)
然后你可以解码:
customdecoder.decode(your_json_string)
因此,这会将项目存储在 OrderedDict
而不是字典中。但请注意 - 如前所述 - order of the keys of JSON objects is unspecified .
或者,您也可以将钩子(Hook)传递给 loads
函数:
from json import loads
from collections import OrderedDict
loads(your_json_string, object_pairs_hook=OrderedDict)
Update: as of python-3.7, a dictionary retains insertion order. So if one uses python-3.7, the standard
json.load
andjson.loads
should work fine. Note however that a JSON object is still unordered, so that the JavaScript end can load/dump the object in any order.
关于python - json.loads() 不保持秩序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47111058/