JSON-Diff-Vergleich
Vergleichen Sie zwei JSON-Dokumente und sehen Sie sofort, welche Schlüssel hinzugefügt, entfernt oder geändert wurden, aufgelistet nach Schlüsselpfad. Objekte und Arrays werden rekursiv durchlaufen, und selbst Typabweichungen werden als Änderung angezeigt. Alles läuft im Browser ab, nichts wird an einen Server gesendet.
Was ist ein JSON-Diff-Vergleich
Ein JSON-Diff-Vergleich stellt zwei JSON-Dokumente Struktur für Struktur gegenüber und zeigt sofort, welche Schlüssel hinzugefügt, welche entfernt und welche Werte geändert wurden. Besonders nützlich ist das in Situationen, in denen ein einfacher Vergleich des vollständigen Textes wegen der schieren Informationsmenge nicht mehr praktikabel ist – etwa bei einer API-Antwort, deren Struktur sich zwischen zwei Versionen geändert hat, oder bei einer Konfigurationsdatei, die sich von einer Umgebung zur anderen unterscheidet. Dieses Tool durchläuft Objekte und Arrays rekursiv und meldet Unterschiede auf Ebene des Schlüsselpfads, sodass Sie selbst in tief verschachteltem JSON genau lokalisieren können, wo sich ein Wert geändert hat.
Damit der Vergleich überhaupt funktioniert, müssen beide Dokumente strukturell gültiges JSON sein. Enthält eine der Eingaben einen Syntaxfehler – ein fehlendes Komma, ein nicht geschlossenes Anführungszeichen und dergleichen –, gibt das Tool an, ob A oder B ungültig ist, anstatt zu versuchen, einen Diff zu berechnen. Außerdem lohnt es sich, die zwei unterschiedlichen Zuordnungsregeln dieses Tools zu verstehen: Objektschlüssel werden anhand ihres Namens zugeordnet, während Array-Elemente anhand ihres Index (ihrer Reihenfolge des Auftretens) zugeordnet werden. Dieses Prinzip im Hinterkopf zu behalten hilft zu verstehen, warum ein bestimmter Schlüssel als „geändert" statt als „hinzugefügt" oder „entfernt" markiert wird.
So vergleichen Sie JSON mit dem JSON-Diff-Vergleich
- Quell-JSON (A) einfügen Fügen Sie JSON-Text in das erste Eingabefeld ein oder tippen Sie ihn direkt ein. Sie können eine bestehende Konfigurationsdatei oder API-Antwort unverändert übernehmen, ohne sie neu zu formatieren.
- Ziel-JSON (B) einfügen Fügen Sie die „Nachher"-Version oder das JSON aus einer anderen Umgebung in das zweite Feld ein. Welches Dokument Sie in A und welches in B platzieren, bestimmt die gemeldete Richtung für „hinzugefügte" und „entfernte" Schlüssel.
- Beispieldaten ausprobieren (optional) Klicken Sie auf „Beispiel laden", um beide Felder mit einem Beispiel zu füllen, das Hinzufügungen, Entfernungen und Änderungen enthält, damit Sie das Ausgabeformat sofort sehen.
- Diff-Ergebnisse lesen Entfernte, hinzugefügte und geänderte Schlüssel werden zusammen mit ihrem Schlüsselpfad aufgelistet. Bei geänderten Schlüsseln werden die Werte davor und danach nebeneinander angezeigt, sodass Sie den Unterschied auf einen Blick erfassen.
- Eingaben bei Bedarf leeren Verwenden Sie die Schaltfläche „Leeren", um beide Felder zu leeren und ein neues Paar von JSON-Dokumenten zu vergleichen.
Tipps für die Nutzung
- Schlüsselpfade werden in Punkt-/Klammernotation wie `user.address[0].city` angezeigt, sodass Sie sofort erkennen, welcher verschachtelte Wert sich geändert hat – egal wie tief die JSON-Struktur verschachtelt ist.
- Arrays werden verglichen, indem Elemente am gleichen Index einander zugeordnet werden. Beachten Sie, dass bereits eine reine Umsortierung der Array-Elemente dazu führt, dass alle Elemente als geändert erkannt werden.
- Enthält derselbe Schlüssel in einem Dokument eine Zeichenkette und im anderen ein Objekt, wird diese Typabweichung ebenfalls als Änderung gemeldet, wobei beide Rohwerte nebeneinander angezeigt werden.
- Beim Vergleich von API-Antworten vor und nach einem Deployment sollten Felder, die sich ohnehin jedes Mal ändern (z. B. Zeitstempel oder Request-IDs), vorab entfernt werden, damit Sie sich nur auf die wirklich relevanten Unterschiede konzentrieren.
- Selbst bei JSON mit sehr vielen unveränderten Werten wird nur die Anzahl der übereinstimmenden Blattwerte angezeigt, damit das Ergebnis übersichtlich bleibt statt unübersichtlich zu werden.
Anwendungsfälle
Unbeabsichtigte Änderungen an API-Antworten erkennen
Speichern Sie eine API-Antwort vor und nach einem Backend-Deployment und vergleichen Sie beide hier, um unbeabsichtigte Hinzufügungen, Entfernungen oder Typänderungen frühzeitig zu erkennen, bevor sie Nutzer in Produktion erreichen.
Konfigurationsdateien zwischen Umgebungen vergleichen
Vergleichen Sie die config.json oder package.json von Staging und Produktion, um fehlende Umgebungsvariablen oder Versionsunterschiede aufzudecken, die sonst leicht übersehen würden.
Einen Diff bei der Code-Review erläutern
Beim Review einer JSON-basierten Migrations-Payload oder Schemadefinition können Sie die erzeugte Diff-Liste direkt teilen, statt die Änderungen mündlich oder in einem langen Kommentarverlauf zu beschreiben.
Fehlschlagende Snapshot-Tests debuggen
Vergleichen Sie einen von einem automatisierten Test erzeugten JSON-Snapshot mit dem Erwartungswert, um schnell zu erkennen, welches Feld genau den Testfehlschlag verursacht hat.
Webhook-Payloads von Drittanbietern prüfen
Vergleichen Sie eine tatsächlich von einem Webhook empfangene Payload mit einem dokumentierten Beispiel, um zu bestätigen, dass sie wirklich der in der API-Spezifikation beschriebenen Struktur entspricht.
Glossar
- Schlüsselpfad
- Eine Zeichenkette, die den Weg von der Wurzel eines JSON-Dokuments zu einem bestimmten Wert darstellt, geschrieben in Punkt-/Klammernotation wie `user.address[0].city`. Diff-Ergebnisse werden auf dieser Ebene gruppiert und angezeigt.
- Verschachtelung
- Eine Struktur, bei der ein Objekt oder Array wiederum weitere Objekte oder Arrays enthält. Je tiefer die Verschachtelung, desto schwerer lassen sich Änderungen allein mit bloßem Auge erkennen.
- Blattwert
- Ein Endwert in einem JSON-Baum, der sich nicht weiter verzweigt – eine Zeichenkette, eine Zahl, ein Booleschen Wert oder null. Ein Diff-Vergleich läuft letztlich darauf hinaus, Blattwerte miteinander abzugleichen.
- Typabweichung
- Eine Situation, in der der Wert am selben Schlüsselpfad in einem Dokument einen Datentyp hat (etwa eine Zeichenkette) und im anderen einen anderen (etwa ein Objekt). Dieses Tool meldet auch Typabweichungen als Änderungen.
- Syntaxfehler
- Fehlerhaft formatierter Text, der dazu führt, dass JSON.parse fehlschlägt. Ein fehlendes Komma oder ein nicht geschlossenes Anführungszeichen sind typische Beispiele.
- JSONPath
- Eine Abfragesprachen-Spezifikation zum Adressieren von Werten innerhalb eines JSON-Dokuments. Die in diesem Tool verwendete Schlüsselpfad-Notation ist konzeptionell eine vereinfachte, verwandte Form der JSONPath-Syntax.
Häufig gestellte Fragen
Übrigens – Wie sich der Schlüsselabgleich bei CSV-Diff und JSON-Diff unterscheidet
Unser CSV-Diff-Vergleich vergleicht Zeilen und Zellen anhand einer einzigen festgelegten Schlüsselspalte, um jede Zeile zu identifizieren. JSON besitzt keine flache Zeilen-Spalten-Struktur – es erlaubt verschachtelte Objekte und Arrays –, sodass sich der zugrunde liegende Abgleichsalgorithmus trotz gleicher Bezeichnung „Diff-Vergleich" deutlich unterscheidet. Statt einer Schlüsselspalte verwendet dieses Tool einen rekursiv von der Wurzel bis zu jedem Blatt aufgebauten „Schlüsselpfad" als Vergleichseinheit.
Arrays sind beim JSON-Diff der heikelste Teil. Eine CSV-Zeile lässt sich eindeutig über ihren Schlüsselspaltenwert identifizieren, JSON-Array-Elemente besitzen jedoch keinen garantierten Bezeichner. Dieses Tool ordnet Elemente einfach nach Index (Reihenfolge des Auftretens) zu – ein Design, das eher zum Verfolgen von Änderungen an Objektstrukturen oder primitiven Werten (etwa in Konfigurationsdateien oder API-Antworten) geeignet ist als zum Verfolgen von Hinzufügungen und Entfernungen innerhalb eines Arrays.
In der Praxis findet sich ein ähnlicher Gedanke in Continuous-Integration-Pipelines, die automatisch prüfen, ob sich der Antwortvertrag einer REST-API geändert hat. Dieses Tool legt Wert auf die Bequemlichkeit, vollständig im Browser zu laufen, doch das zugrunde liegende Konzept überschneidet sich mit Snapshot-Tests und Contract-Testing: JSON-Strukturunterschiede maschinell zu erkennen, ist eine wiederkehrende Aufgabe in vielen Phasen der Softwareentwicklung.