我已经将字符串格式化为像JSON
一样的格式,这样我就可以对其进行json.loads
操作。当我在屏幕上打印时,它变得混乱了。我知道Python字典没有顺序,但是否有任何方法可以保留此顺序?我真的需要保留它。谢谢!
我已经将字符串格式化为像JSON
一样的格式,这样我就可以对其进行json.loads
操作。当我在屏幕上打印时,它变得混乱了。我知道Python字典没有顺序,但是否有任何方法可以保留此顺序?我真的需要保留它。谢谢!
JSON和Python字典(也称为JSON对象)都是无序的。因此,实际上这样做没有任何意义,因为JSON编码器可以更改顺序。
但是,您可以定义自定义的JSON解码器,然后使用该解码器进行解析。因此,在这里,字典钩子将是一个OrderedDict
:
from json import JSONDecoder
from collections import OrderedDict
customdecoder = JSONDecoder(object_pairs_hook=OrderedDict)
然后你可以使用以下方法进行解码:
customdecoder.decode(your_json_string)
因此,这将使用OrderedDict
而不是字典来存储项目。但要注意 - 如前所述 - JSON对象键的顺序是未指定的。
或者,您也可以将钩子传递给loads
函数:
from json import loads
from collections import OrderedDict
loads(your_json_string, object_pairs_hook=OrderedDict)
更新:从 python-3.7 开始,字典将保留插入顺序。因此如果使用python-3.7,标准的
json.load
和json.loads
应该可以正常工作。但需要注意的是,JSON对象仍然是无序的,因此JavaScript端可以以任何顺序加载/转储对象。
json.loads(string, object_pairs_hook=OrderedDict)
是什么意思? - shurrok
json.loads
。 - shurrokJavaScript
代码中截取了一个字符串,它看起来类似于JSON
,但我需要将其格式化以使用json.loads
。我认为这是唯一的方法。但如果你有其他想法,请告诉我,也许我可以改进我的代码。 - shurrokjson.loads()
中的顺序,现在问题已经解决了,不需要再讨论了。 - shurrok