Записать объект JSON обратно в файл .json с порядком в Python - PullRequest
0 голосов
/ 21 мая 2018

Когда я добавляю один атрибут в мой файл JSON, я хочу упорядочить его словарь.Итак, я использую это:

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

Это работает нормально, за исключением случая, когда я пытаюсь записать данные (объект JSON) обратно в файл .json.

Здесь, jsonObj == данные

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 голосов
/ 21 мая 2018

Файл 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)
...