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

Dam*_*mir 8 python json

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

 s={"name":{"Saban:Saulic"},"price":{"koncert:1000"} ....}
Run Code Online (Sandbox Code Playgroud)

当我写的东西像

tags=json.loads(s)
Run Code Online (Sandbox Code Playgroud)

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

Die*_*rro 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)包装,或者简单地解码为unicode对象并传递给loads().

object_hook是一个可选函数,将使用任何对象文字解码(dict)的结果调用.将使用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)
Run Code Online (Sandbox Code Playgroud)