8

当我想将 json 字符串转换为 Python 字典时遇到问题。我有类似的字符串

 s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}

当我写类似的东西时

tags=json.loads(s)

我 gtet 字典,但键的顺序与字符串中的顺序不同(它不是名称,价格......)。如何将 json 字符串转换为字典并在键中保存顺序?

4

1 回答 1

22

Python 2.7开始,您的OrderedDict模块来自collections

这种字典保留了元素的插入顺序。

来自 Python 文档:

json.load(fp[, encoding[, cls[, object_hook[, parse_float[, parse_int[, parse_constant[, object_pairs_hook[, **kw]]]]]]]])

将 fp(一个支持 .read() 且包含 JSON 文档的类文件对象)反序列化为 Python 对象。

如果 fp 的内容使用 UTF-8 以外的基于 ASCII 的编码(例如 latin-1)进行编码,则必须指定适当的编码名称。不允许使用不基于 ASCII 的编码(例如 UCS-2),应使用 codecs.getreader(encoding)(fp) 进行包装,或者直接解码为 un​​icode 对象并传递给 load()。

object_hook 是一个可选函数,将使用任何对象文字解码的结果(字典)调用。将使用 object_hook 的返回值而不是 dict。此功能可用于实现自定义解码器(例如 JSON-RPC 类提示)。

object_pairs_hook 是一个可选函数,将调用使用有序对列表解码的任何对象文字的结果。将使用 object_pairs_hook 的返回值而不是 dict。此功能可用于实现依赖于键值对解码顺序的自定义解码器(例如,collections.OrderedDict() 将记住插入顺序)。如果还定义了 object_hook,则 object_pairs_hook 优先。

我认为你可以使用 object_pairs_hook 参数collections.OrderedDict()

tags=json.loads(s, object_pairs_hook=collections.OrderedDict)
于 2012-04-18T10:07:08.610 回答