Python JSON.负载更改对象的顺序



我有一个包含JSON对象的文件。它已加载以下方式:

with open('data.json', 'r') as input_file:
  input_data = input_file.read()

此时,Input_data仅包含一个字符串,现在我继续将其解析为JSON:

data_content = json.loads(input_data.decode('utf-8'))

data_content具有我需要的字符串的JSON表示形式,但是由于某种原因,JSON后我不清楚它正在更改密钥的原始顺序,因此,例如,如果我的文件包含类似的文件:

{ "z_id": 312312,
  "fname": "test",
  "program": "none",
  "org": null
}

JSON。加载订单会更改以说:

{ "fname": "test",
  "program": None,
  "z_id": 312312,
  "org": "none"
}

为什么会发生这种情况?有没有办法保留订单?我正在使用Python 2.7。

python中的字典(对象(没有保证的顺序。因此,当分解为dict时,丢失了订单。

如果订单由于某种原因很重要,则可以使用json.loads使用OrderedDict,就像dict一样,但是保存了密钥的顺序。

from collections import OrderedDict
data_content = json.loads(input_data.decode('utf-8'), object_pairs_hook=OrderedDict)

这不是json.load的问题。Python中的字典没有执行命令,因此您会过失;一般来说,这并不重要,因为您根据字符串访问元素,例如"id"

最新更新