我有一个包含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。
python中的字典(对象)没有保证的顺序。因此,当解析为时dict,订单将丢失。
dict
如果订单是出于某种原因很重要,你可以json.loads使用一个OrderedDict替代,这就好比dict,但键的顺序保存。
json.loads
OrderedDict
from collections import OrderedDict data_content = json.loads(input_data.decode('utf-8'), object_pairs_hook=OrderedDict)