Мой вариант использования заключался в том, чтобы сохранить несколько объектов JSON в файл и ответить Марти Марти мне несколько помог. Но в соответствии с моим вариантом использования ответ не был полным, поскольку он перезаписывал старые данные каждый раз, когда сохранялась новая запись.
Чтобы сохранить несколько записей в файле, необходимо проверить старое содержимое (т.е. прочитать перед записью). Типичный файл, содержащий данные JSON, будет иметь list
или object
корневой каталог. Поэтому я считал, что мой файл JSON всегда имеет, list of objects
и каждый раз, когда я добавляю в него данные, я просто сначала загружаю список, добавляю в него свои новые данные и выгружаю его обратно в доступный только для записи экземпляр file ( w
):
def saveJson(url,sc):
newdata = {'url':url,'sc':sc}
json_path = "db/file.json"
old_list= []
with open(json_path) as myfile:
old_list = json.load(myfile)
old_list.append(newdata)
with open(json_path,"w") as myfile:
json.dump(old_list, myfile, sort_keys=True, indent=4)
return "success"
Новый файл JSON будет выглядеть примерно так:
[
{
"sc": "a11",
"url": "www.google.com"
},
{
"sc": "a12",
"url": "www.google.com"
},
{
"sc": "a13",
"url": "www.google.com"
}
]
НОТА: Необходимо иметь файл с именем file.json
с в []
качестве исходных данных для такого подхода к работе
PS: не имеет отношения к исходному вопросу, но этот подход также можно улучшить, сначала проверив, существует ли уже наша запись (на основе одного или нескольких ключей), и только затем добавьте и сохраните данные.