使用Python中的顺序将JSON对象写回.json文件

时间:2018-05-20 21:57:23

标签: python json ordereddictionary

当我向我的JSON文件添加一个属性时,我希望它的字典是有序的。所以,我用这个:

data[player] = json.loads(thisdata, object_pairs_hook=OrderedDict)

这种方法很好,除了我尝试将数据(JSON对象)写回.json文件的情况。

这里,jsonObj == data

file = open("testJSON.json", 'w+')
output = ""
for x in range(0, len(str(jsonObj))):
    if (str(jsonObj)[x] == "{"):
        output = output + "{" + "\n"
    elif (str(jsonObj)[x] == "}"):
        output = output + "\n" + "}" + "\n"
    elif (str(jsonObj)[x] == ","):
        output = output + "," + "\n"
    elif (str(jsonObj)[x] == "\'"):
        output = output + "\""
    else:
        output = output + str(jsonObj)[x]
file.write(output)
file.close()

.json输出文件是这样的:

{
"Noob": OrderedDict([("HP",
 10),
 ("MP",
 5),
 ("STR",
 6)]),
 "Saber": {
"STR": 10,
 "MP": 50,
 "HP": 100
}
,
 "Archer": {
"STR": 8,
 "MP": 40,
 "HP": 80
}

}

如您所见,OrderedDict在这种情况下不起作用。

我知道我可以手工解析这个字符串,但这太痛苦了,可能不是最有效的方法。

是否有任何有效的方法可以使用有序字典回写.json文件?

1 个答案:

答案 0 :(得分:3)

JSON文件无法确定是否应该订购字典;但是,只需使用OrderedDict,您就可以使用json.dump 编写文件,并且应保留键的顺序:< / p>

with open("testJSON.json", 'w') as f:
    json.dump(jsonObj, f)

如果您想要更漂亮的输出,请添加例如indent=4

with open("testJSON.json", 'w') as f:
    json.dump(jsonObj, f, indent=4)