JSON Diff: zwei JSON-Dokumente strukturell vergleichen
Vergleichen Sie zwei JSON-Dokumente nach Struktur statt nach Text: jede Abweichung wird als ADDED, REMOVED oder CHANGED mit vollem Pfad wie x.y[1] gemeldet.
Ein Textvergleich meldet bei JSON ständig Unterschiede, die keine sind: andere Einrückung, andere Reihenfolge der Objektschlüssel, ein umbrochenes Array. Dieses Werkzeug vergleicht stattdessen die geparste Struktur beider Dokumente und interessiert sich nur für Form und Werte. Jede tatsächliche Abweichung erscheint einzeln – mit Typ (ADDED, REMOVED, CHANGED) und dem genauen Pfad zum betroffenen Blatt.
Was ist ein struktureller JSON-Vergleich?
Ein struktureller JSON-Vergleich betrachtet nicht die Zeichenfolge, sondern den Datenbaum, der beim Parsen entsteht. Formatierung, Zeilenumbrüche und die Reihenfolge der Schlüssel innerhalb eines Objekts sind dabei bedeutungslos – zwei Dokumente mit identischem Inhalt gelten als strukturell identisch, auch wenn sich ihre Textform stark unterscheidet. Gemeldet wird nur, was inhaltlich zählt: fehlende oder zusätzliche Schlüssel, geänderte Werte und geänderte Typen. Arrays bleiben dabei geordnet und werden Position für Position verglichen.
So funktioniert der JSON-Vergleich
Beide Seiten werden mit JSON.parse geparst und anschließend parallel in die Tiefe durchlaufen — verglichen wird also das Datenmodell, nicht der Text. RFC 8259 definiert ein Objekt als ungeordnete Sammlung, und genau deshalb gelten hier vertauschte Schlüssel oder andere Einrückung als identisch, während ein zeilenbasierter Diff sie als Änderung melden würde. Schlüssel, die nur auf einer Seite stehen, werden zu HINZUGEFÜGT oder ENTFERNT; Arrays werden über den Index zugeordnet, weshalb ein Einschub am Anfang alles Folgende verschiebt und als Reihe von Änderungen erscheint statt als eine Verschiebung. Blätter werden nach Typ und Wert verglichen, sodass 30 gegen "30" ein echter Unterschied ist. Pfade werden in Punkt- und Klammerform (user.tags[1]) ausgegeben — im Sinne des JSON Pointer, der einen einzelnen Knoten im Dokument adressiert.
Funktionen im Überblick
So verwenden Sie den JSON Diff
Fügen Sie das Ausgangsdokument – etwa die alte API-Antwort oder die Referenzkonfiguration – in das linke Feld ein.
Fügen Sie rechts die zu prüfende Version ein; Einrückung und Schlüsselreihenfolge dürfen sich beliebig unterscheiden.
Lesen Sie den Status: Entweder sind beide Dokumente strukturell identisch, oder es folgt eine Liste der Abweichungen.
Arbeiten Sie die Liste Pfad für Pfad durch – ADDED, REMOVED und CHANGED zeigen jeweils, an welcher Stelle im Baum die Änderung liegt.
Häufige Missverständnisse
Beispiele
Siehe auch
- JSON-Formatierer — Eine Seite lässt sich nicht parsen? Formatiere sie zuerst — der Formatierer zeigt auf das Zeichen.
- CSV zu JSON — Du vergleichst zwei Tabellen-Exporte? Wandle beide in JSON und vergleiche die Struktur.
FAQ
Warum meldet das Werkzeug „identisch", obwohl die beiden Texte unterschiedlich aussehen?
Verglichen wird die Struktur, nicht der Zeichenstrom. Unterschiedliche Einrückung und eine andere Reihenfolge der Objektschlüssel verändern den Datenbaum nicht, deshalb gelten solche Dokumente korrekt als strukturell identisch. Nur abweichende Schlüssel, Werte oder Typen erscheinen als Unterschied.
Wie sind die Pfade wie x.y[1] zu lesen?
Der Pfad beschreibt den Weg von der Wurzel bis zum betroffenen Blatt. Punkte stehen für Objektschlüssel, eckige Klammern für Array-Positionen: x.y[1] meint das zweite Element des Arrays y innerhalb des Objekts x. So finden Sie die Stelle direkt im Originaldokument wieder.
Warum ergibt ein eingefügtes Array-Element so viele Unterschiede?
Arrays werden nach Index verglichen, nicht nach Inhalt. Ein an den Anfang gesetztes Element verschiebt jede nachfolgende Position um eins, sodass Index für Index ein CHANGED entsteht und am Ende ein ADDED. Wer stabile Vergleiche braucht, sollte die Reihenfolge der Arrays konstant halten.
Warum sind manche angezeigte Werte abgeschnitten?
Ausgegebene Werte werden auf 60 Zeichen gekürzt, damit die Liste der Unterschiede lesbar bleibt. Der Pfad und die Art der Änderung sind dabei immer vollständig – für den kompletten Wert schauen Sie an der angegebenen Stelle im Ausgangsdokument nach.