Когда я добавляю один атрибут в свой файл 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 с упорядоченным словарем?






Файл JSON не может реально сигнализировать, следует ли упорядочивать словари или нет; однако вы можете очень хорошо написать файла с OrderedDict, просто используя json.dump и порядок ключей должен быть сохранен:
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)
Извините, я ждал ограничения в 10 минут
@Taihouuuuuuuuuuu, тогда ты мог бы принять мой ответ