Vergleicht man zwei JSON-Dokumente mit einem gewöhnlichen Text-Diff (wie bei Code), ist das Ergebnis oft irreführend: Dieselben Daten lassen sich mit unterschiedlicher Schlüsselreihenfolge, unterschiedlicher Einrückung oder unterschiedlich vielen Leerzeichen schreiben — und der Text-Diff zeigt einen „Unterschied“, wo die Daten in Wirklichkeit identisch sind.
Struktureller Vergleich
Ein struktureller JSON Diff parst beide Dokumente in einen Baum aus Werten und vergleicht die eigentlichen Daten: Existiert ein Feld, welchen Wert hat es, stimmt der Typ überein. Die Reihenfolge der Objektschlüssel, überzählige Leerzeichen oder der Einrückungsstil werden dabei nicht berücksichtigt — sie sind kein Teil der Daten selbst.
Was der Diff zeigt
Ein typisches Ergebnis eines strukturellen Vergleichs hebt drei Arten von Änderungen hervor: Felder, die im zweiten Dokument hinzugekommen sind, Felder, die aus dem ersten entfernt wurden, und Felder, die in beiden existieren, aber unterschiedliche Werte haben. Bei Arrays ist der Vergleich komplizierter — man muss entscheiden, ob Elemente nach Position verglichen oder ähnliche Objekte einander zugeordnet werden sollen.
Wozu man das braucht
- Eine API-Antwort vor und nach einer Backend-Änderung vergleichen, um die tatsächlichen Datenänderungen zu sehen.
- Prüfen, dass eine Änderung an einer Konfigurationsdatei nichts Unbeabsichtigtes betroffen hat.
- Eine Regression in Tests finden, bei denen erwartetes und tatsächliches JSON voneinander abweichen.
Diff als Nachweis für Datenschutz-Audits
In deutschen und generell DACH-Unternehmen ist es wegen der DSGVO üblich, Konfigurationsänderungen an Consent-Einstellungen, Datenverarbeitungszwecken oder Cookie-Kategorien nachvollziehbar zu dokumentieren — diese Konfigurationen liegen häufig als JSON vor. Ein struktureller Diff zwischen der Version vor und nach einer Änderung liefert genau das Artefakt, das ein Datenschutzbeauftragter braucht: eine präzise Liste, welche Verarbeitungszwecke hinzukamen, entfernt wurden oder sich in ihrer Definition geändert haben, statt einer unübersichtlichen Zeile-für-Zeile-Textdifferenz.
Arrays vergleichen: nach Position oder nach Schlüssel
Der einfachste Ansatz vergleicht Array-Elemente Index für Index, aber wenn mitten im Array ein neues Element eingefügt wird, „verschieben“ sich alle nachfolgenden Positionen, und der Diff zeigt eine Änderung bei jedem Element nach der Einfügestelle, obwohl sich eigentlich nur eines geändert hat. Klügere Tools versuchen, Elemente anhand eines eindeutigen Feldes (etwa id) einander zuzuordnen, um wirklich Einfügung oder Löschung anzuzeigen, statt einer Kaskade falscher Änderungen.