JSON Diff: Zwei JSON-Dokumente vergleichen
Zwei JSON-Dokumente nach Struktur vergleichen, nicht nach Zeilen. Alles läuft lokal — nichts wird hochgeladen.
- Eingang
- Two JSON documents
- Ausgang
- Path-level changes · JSON Patch
Original
gültig
Geändert
gültig
Unterschiede
6 Änderungen
- Geändert/version
− 1
+ 2
- Hinzugefügt/settings/language
+ "de"
- Hinzugefügt/users/0
+ {"id":3,"name":"Grace","email":"grace@example.com"}
- Geändert/users/1/email
− "ada@example.com"
+ "ada@example.org"
- Entfernt/users/1
− {"id":2,"name":"Linus","email":"linus@example.com"}
- Typ geändert/limitString → Zahl
− "100"
+ 100
JSON nach Bedeutung vergleichen, nicht nach Text
Dieses JSON-Diff-Tool vergleicht zwei JSON-Dokumente als Daten. Objekte werden Schlüssel für Schlüssel abgeglichen, egal in welcher Reihenfolge die Schlüssel stehen, Formatierung und Einrückung werden ignoriert, und jeder Unterschied wird mit seinem genauen Pfad, der Art der Änderung und dem alten und neuen Wert aufgeführt. Arrays aus Datensätzen lassen sich über ein id-Feld zuordnen, sodass eine umsortierte Liste oder eine oben eingefügte Zeile nicht so aussieht, als hätte sich alles geändert. Exportieren Sie das Ergebnis als JSON Patch nach RFC 6902 oder als Textbericht. Beide Dokumente bleiben in Ihrem Browser; nichts wird hochgeladen.
So vergleichen Sie zwei JSON-Dateien
- Fügen Sie links das ursprüngliche und rechts das neue JSON ein, oder ziehen Sie auf jede Seite eine
.json-Datei. - Beheben Sie einen eventuellen Parse-Fehler über einem Bereich; er nennt Zeile und Spalte.
- Lesen Sie die Liste der Änderungen, jede mit ihrem JSON-Pointer-Pfad wie
/users/2/email, oder wechseln Sie zur Baumansicht, um sie im Zusammenhang zu durchsuchen. - Schalten Sie Array-Elemente per Schlüssel zuordnen ein und geben Sie das Feld an, das einen Datensatz identifiziert, meist
id. - Filtern Sie nach hinzugefügt, entfernt, geändert oder Typ geändert, und kopieren Sie dann den JSON Patch oder laden Sie einen Textbericht herunter.
Warum ein Textvergleich für JSON das falsche Werkzeug ist
Zwei JSON-Dokumente können als Daten identisch und als Text völlig verschieden sein. Eine API liefert die Schlüssel in anderer Reihenfolge, eine Datei ist minifiziert und die andere formatiert, eine schreibt 1.0, wo die andere 1 schreibt. Ein zeilenbasierter Textvergleich markiert all das. Ein struktureller Diff parst zuerst beide Seiten und vergleicht die Werte, sodass nur echte Änderungen gemeldet werden: ein hinzugefügter oder entfernter Schlüssel, ein geänderter Wert oder ein Wert, dessen Typ sich geändert hat, etwa wenn der String "42" zur Zahl 42 wird.
Zahlen werden nach Wert mit voller Genauigkeit verglichen, 1.50 ist also gleich 1.5, während zwei 20-stellige IDs, die sich in der letzten Ziffer unterscheiden, weiterhin als verschieden gemeldet werden – ein Vergleich über JavaScript-Zahlen würde das übersehen.
- Hinzugefügt
- Der Schlüssel oder das Array-Element existiert nur im neuen Dokument.
- Entfernt
- Der Schlüssel oder das Array-Element existiert nur im ursprünglichen Dokument.
- Geändert
- Gleiche Stelle, gleicher Typ, anderer Wert.
- Typ geändert
- Der Wert hat einen anderen JSON-Typ bekommen, zum Beispiel wurde aus einem Objekt ein Array oder aus einer Zahl ein String.
Arrays vergleichen: nach Position oder nach Schlüssel
Standardmäßig werden Array-Elemente nach Position verglichen: Element 0 mit Element 0, Element 1 mit Element 1. Das ist richtig für Listen, bei denen die Reihenfolge zählt, etwa Koordinaten oder Schritte. Für Listen von Datensätzen nicht: Fügen Sie oben einen Benutzer ein, und jeder Benutzer danach erscheint geändert.
Mit Array-Elemente per Schlüssel zuordnen werden Elemente stattdessen über ein identifizierendes Feld gepaart, standardmäßig id. Jeder Datensatz wird mit dem Datensatz verglichen, der dieselbe id hat, egal wo er steht, und das Ergebnis sagt, dass ein Benutzer hinzugefügt und eine E-Mail-Adresse geändert wurde. Die Zuordnung wird nur verwendet, wenn jedes Element auf beiden Seiten ein Objekt mit einem eindeutigen String oder einer eindeutigen Zahl in diesem Feld ist; andernfalls wird das Array nach Position verglichen.
Die Baumansicht zeigt beide Dokumente zu einer Gliederung zusammengeführt. Zweige mit Änderungen öffnen sich automatisch, unveränderte bleiben eingeklappt, Hinzufügungen sind grün, Entfernungen rot, und geänderte Werte erscheinen als alt → neu. Schalten Sie Nur Änderungen ab, um die unveränderten Schlüssel drumherum als Kontext zu sehen.
Pfade, JSON Pointer und JSON Patch
Jede Änderung wird mit einem JSON Pointer (RFC 6901) verortet: einem durch Schrägstriche getrennten Pfad ab der Wurzel wie /orders/0/total, wobei Array-Elemente ab null nummeriert werden und die Zeichen ~ und / in einem Schlüssel als ~0 und ~1 geschrieben werden. Ein leerer Pfad bedeutet das ganze Dokument.
Der Export ist ein JSON Patch (RFC 6902): eine Liste von add-, remove- und replace-Operationen, die das linke Dokument in das rechte überführt, wenn sie der Reihe nach angewendet werden. Bibliotheken wie fast-json-patch, jsonpatch für Python und die Patch-Unterstützung von Kubernetes wenden ihn direkt an. Entfernungen aus Arrays werden vom höchsten Index abwärts geschrieben, damit der Index jeder Operation bei ihrer Ausführung noch stimmt.
Um eines der Dokumente vorher aufzuräumen, formatieren Sie es mit dem JSON Formatter; um das Ergebnis in YAML oder CSV umzuwandeln, nutzen Sie den Datenkonverter.
Häufige Fragen
- Wie vergleiche ich zwei JSON-Dateien?
- Fügen Sie das ursprüngliche JSON links und das neue rechts ein oder ziehen Sie die Dateien darauf. Jeder Unterschied wird mit Pfad, Art der Änderung sowie altem und neuem Wert aufgeführt.
- Spielt die Reihenfolge der Schlüssel beim JSON-Vergleich eine Rolle?
- Nein. Objekte werden Schlüssel für Schlüssel verglichen, dieselben Schlüssel in anderer Reihenfolge sind also gleich. Leerraum und Einrückung werden ebenfalls ignoriert.
- Wie vergleiche ich JSON-Arrays, wenn sich die Reihenfolge geändert hat?
- Schalten Sie Array-Elemente per Schlüssel zuordnen ein und geben Sie das Feld an, das jedes Element identifiziert, etwa id. Die Elemente werden dann über diesen Wert gepaart statt über ihre Position.
- Was ist ein JSON Patch?
- Ein JSON Patch, definiert in RFC 6902, ist ein JSON-Array aus Operationen wie add, remove und replace, jeweils mit einem Pfad. Wendet man ihn auf das ursprüngliche Dokument an, entsteht das neue.
- Was bedeutet Typ geändert?
- Der Wert an diesem Pfad hat einen anderen JSON-Typ bekommen, zum Beispiel wurde aus einer Zahl ein String oder aus einem Objekt ein Array. Das deutet meist auf einen Fehler in dem hin, was die Daten erzeugt hat.
- Kann ich große JSON-Dateien vergleichen?
- Ja. Dateien mit mehreren Megabyte werden auf einem typischen Computer in deutlich unter einer Sekunde verglichen, weil Parsen und Vergleichen lokal in Ihrem Browser laufen.
- Wird mein JSON hochgeladen?
- Nein. Beide Dokumente werden in Ihrem Browser geparst und verglichen und nirgendwohin gesendet. Sie können also auch API-Antworten mit personenbezogenen Daten oder Geheimnissen bedenkenlos vergleichen.