Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python json转储,如何使指定键优先?_Python_Json - Fatal编程技术网

python json转储,如何使指定键优先?

python json转储,如何使指定键优先?,python,json,Python,Json,我想将此json转储到一个文件: json.dumps(data) 以下是数据: { "list":[ "one": { "id": "12","desc":"its 12","name":"pop"}, "two": {"id": "13","desc":"its 13","name":"kindle"} ] } 我希望id成为我将其转储到文件后的第一个属性,但事实并非如此。我该如何解决这个问题呢?我猜这是因为你在使

我想将此json转储到一个文件:

json.dumps(data) 
以下是数据:

 {
       "list":[
        "one": { "id": "12","desc":"its 12","name":"pop"},
        "two": {"id": "13","desc":"its 13","name":"kindle"}
        ]
    }

我希望
id
成为我将其转储到文件后的第一个属性,但事实并非如此。我该如何解决这个问题呢?

我猜这是因为你在使用字典(哈希映射)。这是不可忍受的。 你能做的是:

from collections import OrderedDict
data = OrderedDict()
data['list'] = OrderedDict()
data['list']['one'] = OrderedDict()
data['list']['one']['id'] = '12'
data['list']['one']['idesc'] = ...
data['list']['two'] = ...
这使得它按输入顺序排序。 知道dict/hashmap的输出是“不可能的”,因为传统词典的性质(和速度)使得排序/访问顺序因用法、词典中的项目和许多其他因素而有所不同。 因此,您需要在将字典发送到json之前将其传递给
sort()
函数,或者使用名为
orderedict
的较慢版本的字典(见上文)

非常感谢@MarcoNawijn检查JSON的源代码,不支持字典的排序结构,这意味着您必须自己构建JSON字符串


如果JSON字符串另一端的解析器遵守该顺序(我对此表示怀疑),则可以将其传递给一个函数,该函数为您的
orderedict
构建常规文本字符串表示,并根据JSON标准格式化字符串。然而,这将比我现在占用更多的时间,因为我不能100%确定JSON字符串的RFC。

您不应该担心JSON的保存顺序。倾倒时,订单将被更改。最好也看看这些。 和

请向我们展示您将此JSON转储到文件中的代码。这不起作用
json.dump(..)
不遵守添加键/值对的顺序。您可以在交互式解释器中轻松地检查这一点。
json.dump(..)
函数确实有一个
sort\u keys
属性,但是您不能提供自定义排序函数(据我所知,不看它的实际实现)。如果
id
属性的实际位置很重要,我建议使用
sort\u key
属性。
id
属性将至少位于一致/可预测的位置。因此,我检查了
json.dump(..)
的实现。它确实对排序函数进行了硬编码,以便按以下键进行排序:
sorted(dct.items(),key=lambda kv:kv[0])
@MarcoNawijn感谢您的解释。我不认为json硬编码了排序顺序。考虑到JSON被定义为在输出端没有特定顺序,我不明白为什么这是一个相关的问题,即使用户面临的问题让我很好奇:)