Python: Fügen Sie JSON in Bestehende JSON
Angenommen ich habe zwei json-Dateien. Ich würde gerne in der Lage, laden Sie beide, fügen Sie dann die Einträge von der zweiten in die erste. Dies kann auch das hinzufügen von Feldern oder Listen-Einträge. So etwas wie im folgenden Beispiel:
Datei1.json: { "Obst": [ { "name": "apple", "color": "red" }, { "name": "orange", "Farbe": "orange" } ] }
Datei2.json: { "Obst": [ { "name": "Erdbeere", "color": "red", "size": "small" }, { "name": "orange", "size": "medium" } ] }
Ergebnis: { "Obst": [ { "name": "apple", "color": "red" }, { "name": "orange", "Farbe": "orange", "size": "medium" }, { "name": "Erdbeere", "color": "red", "size": "small" } ] }
Zuerst dachte ich, laden Sie Sie in Wörterbüchern und versuchen so etwas wie update:
import simplejson
filea = open("file1.json", 'r')
dicta = simplejson.loads(filea.read())
fileb = open("file2.json", 'r')
dictb = simplejson.loads(fileb.read())
filea.close()
fileb.close()
dicta.update(dictb)
Da beide Wörterbücher haben einen Eintrag für "Obst" ich hatte gehofft, Sie würden verschmelzen, aber es einfach überschreibt den Eintrag in der dicta mit der Eintragung in dictb.
Ich merke, ich könnte schreiben Sie code, um eine Schleife durch dieses Beispiel, aber die eigentlichen Dateien, die ich verwende, sind weit größer und komplizierter. Ich Frage mich, ob es eine Bibliothek gibt, die so etwas Tat schon gehen, bevor ich das Rad neu erfinden. Für was es Wert ist, ich bin mit Python 2.6.2.
Vielen Dank für jede Beratung oder Anregungen!
fruit
auf Ihre name
Wert? Sie haben Kontrolle über das json-format? Und was sind die Regeln, wenn Datei1 und Datei2 haben widersprüchliche Daten in anderen Bereichen (ex haben beide eine color
für apple
)?In diesem speziellen Beispiel, ich würde gerne mitmachen, basierend auf den name-Wert, ja. Im realen Leben gäbe es zwei spezifische Felder, die musste passen, statt nur dem einen, aber das Konzept ist ähnlich. Ich habe die volle Kontrolle über das format der zweiten Datei und keine überhaupt über die erste Datei. Es sollte nie zu Konflikten kommen, so dass das Verhalten in diesem Fall werden könnte, was einfacher ist (z.B. überschreiben mit der neuen oder der alten)
Welche version von Python?
Gute Frage, tut mir Leid ich vernachlässigte zu erwähnen, dass früher. Ich bin mit Python 2.6.2, und ich habe Hinzugefügt, dass zu dem original-Beitrag.
InformationsquelleAutor Matthew Pape | 2012-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie zum erweitern der Listen-überprüfung der einzelnen Werte. Es gibt keine Möglichkeit, Python-jetzt können Sie Zusammenführen möchten Ihnen, basierend auf
name
Element der Wörterbücher:Also die
dicta
variable:InformationsquelleAutor JBernardo
Gegeben geparste json in eine Liste
parsed_json
:Könnte man es machen, mit einem dict-comprehension in 2.7+, aber Sie sagte 2.6.2. Angesichts Ihrer Aussage, dass in der realen Welt, Sie sind die Verschmelzung, die auf mehr als einem Feld, können Sie ändern Sie einfach die Taste, wenn die Einstellung
transformed_data
Mitglieder zu sein, was Sie Felder aus der Quelle, die Sie wollen. Wenn Sie kümmern sich nicht um die Zerstörung der ursprünglichen analysiert Daten, Sie können auch fallen diecopy
.Ich könnte falsch sein, aber so etwas ist wahrscheinlich zu sein sehr schwierig zu finden, außerhalb von ein ORM. Es ist etwas, dass viele Menschen zu tun haben, aber die Logik für die Transformation wird so zugeschnitten auf jedes Szenario, das die Verallgemeinerung das Verhalten in einer Bibliothek schwierig sein würde und wahrscheinlich teurer als nur Ihre eigenen Rollen.
Ich dachte, eine generalisierte Bibliothek wäre suboptimal, aber das wäre immer noch ideal für mich. Die Zeit ist nicht viel von ein Anliegen an alle. Das einzige problem für mich ist, dass die Dateien sich weiter verändern, wird die Kraft, den code zu ändern, jedes mal, wie gut.
InformationsquelleAutor Silas Ray