moim przypadkiem użycia było zapisanie wielu obiektów JSON w pliku, a odpowiedź Marty'ego nieco mi pomogła. Ale aby obsłużyć mój przypadek użycia, odpowiedź nie była kompletna, ponieważ zastąpiłaby stare dane za każdym razem, gdy zapisywany jest nowy wpis.
Aby zapisać wiele wpisów w pliku, należy sprawdzić starą zawartość (tzn. Przeczytać przed zapisem). Typowy plik zawierający dane JSON ma albo root, list
albo object
jako root. Uznałem więc, że mój plik json zawsze ma list of objects
i za każdym razem, gdy dodam do niego dane, najpierw ładuję listę, dołączam do niej moje nowe dane i zrzucam z powrotem do instancji file ( w
) tylko do zapisu :
def saveJson(url,sc): #this function writes the 2 values to file
newdata = {'url':url,'sc':sc}
json_path = "db/file.json"
old_list= []
with open(json_path) as myfile: #read the contents first
old_list = json.load(myfile)
old_list.append(newdata)
with open(json_path,"w") as myfile: #overwrite the whole content
json.dump(old_list,myfile,sort_keys=True,indent=4)
return "sucess"
nowy plik json będzie wyglądał mniej więcej tak:
[
{
"sc": "a11",
"url": "www.google.com"
},
{
"sc": "a12",
"url": "www.google.com"
},
{
"sc": "a13",
"url": "www.google.com"
}
]
UWAGA: Ważne jest, aby mieć plik o nazwie file.json
z []
jak wstępnych danych dla tego podejścia do pracy
PS: niezwiązane z pierwotnym pytaniem, ale to podejście można również ulepszyć, najpierw sprawdzając, czy nasz wpis już istnieje (na podstawie 1 / wielu kluczy), a dopiero potem dodając i zapisując dane. Daj mi znać, jeśli ktoś potrzebuje tej kontroli, dodam do odpowiedzi