一尘不染

Python json.loads更改对象的顺序

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.loads之后我不清楚,它改变了键的原始顺序,例如,如果我的文件包含以下内容:

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

在json.loads之后,顺序更改为类似以下内容:

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

为什么会这样呢?有办法保留订单吗?我正在使用Python 2.7。


阅读 447

收藏
2020-07-27

共1个答案

一尘不染

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

如果订单是出于某种原因很重要,你可以json.loads使用一个OrderedDict替代,这就好比dict,但键的顺序保存。

from collections import OrderedDict

data_content = json.loads(input_data.decode('utf-8'), object_pairs_hook=OrderedDict)
2020-07-27