Mein Anwendungsfall war das Speichern mehrerer JSON-Objekte in einer Datei, und Martys Antwort half mir etwas. Um meinem Anwendungsfall gerecht zu werden, war die Antwort jedoch nicht vollständig, da die alten Daten jedes Mal überschrieben würden, wenn ein neuer Eintrag gespeichert wird.
Um mehrere Einträge in einer Datei zu speichern, muss nach dem alten Inhalt gesucht werden (dh vor dem Schreiben lesen). Eine typische Datei mit JSON-Daten hat entweder ein list
oder ein object
als root. Daher habe ich berücksichtigt, dass meine JSON-Datei immer eine enthält. list of objects
Jedes Mal, wenn ich Daten hinzufüge, lade ich einfach zuerst die Liste, füge meine neuen Daten hinzu und speichere sie wieder in eine nur beschreibbare Instanz von file ( w
):
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"
Die neue JSON-Datei sieht ungefähr so aus:
[
{
"sc": "a11",
"url": "www.google.com"
},
{
"sc": "a12",
"url": "www.google.com"
},
{
"sc": "a13",
"url": "www.google.com"
}
]
HINWEIS: Es ist wichtig, eine Datei file.json
mit []
den Anfangsdaten zu haben, damit dieser Ansatz funktioniert
PS: Nicht im Zusammenhang mit der ursprünglichen Frage, aber dieser Ansatz könnte auch weiter verbessert werden, indem zunächst geprüft wird, ob unser Eintrag bereits vorhanden ist (basierend auf 1 / mehreren Schlüsseln), und erst dann die Daten angehängt und gespeichert werden. Lassen Sie mich wissen, wenn jemand diesen Scheck benötigt, ich werde die Antwort ergänzen