如何将 json 字符串转换为字典并在键中保存顺序



我想将json字符串转换为Python字典时遇到问题。我有像这样的字符串

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

当我写类似的东西时

tags=json.loads(s)

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

从Python 2.7开始,你已经从collections OrderedDict模块

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

来自 Python 文档:

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

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

如果 fp 的内容使用基于 ASCII 的编码进行编码,则其他 比 UTF-8(例如拉丁语-1),则适当的编码名称必须是 指定。不基于 ASCII 的编码(如 UCS-2)不是 允许,并且应该用编解码器包装.getReader(编码)(FP),或者 只需解码为 Unicode 对象并传递给 loads()。

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

object_pairs_hook 是一个可选函数,将使用 使用有序的对列表解码的任何对象文本的结果。 将使用 object_pairs_hook 的返回值来代替 字典。此功能可用于实现依赖于 按照键和值对的解码顺序(例如, 收集。OrderedDict() 会记住插入的顺序)。如果 object_hook也已定义,则object_pairs_hook优先。

我认为您可以将object_pairs_hook参数与collections.OrderedDict()一起使用

tags=json.loads(s, object_pairs_hook=collections.OrderedDict)

最新更新