JSON Werkzeuge · 6 Min. gelesen
JSON Diff: Daten so vergleichen, wie sie tatsächlich
Ein Textunterschied sagt Ihnen, welche Zeichen sich geändert haben. Ein JSON-Diff sagt Ihnen, welche Werte sich geändert haben, und das sind unterschiedliche Fragen – oft mit unterschiedlichen Antworten. Da die Objektreihenfolge JSON nicht signifikant ist, kann eine Nutzlast, die ein zeilenbasierter Vergleich als vollständige Neuschreibung darstellt, strukturell identisch sein, während eine echte Änderung eines einzelnen verschachtelten Werts in einer sehr langen minimierten Zeile verborgen sein kann.
Aktualisiert
Warum Textunterschiede bei JSON fehlschlagen
Drei Eigenschaften von JSON unterbrechen den Vergleich auf Zeichenebene. Die Schlüsselreihenfolge ist nicht von Bedeutung, sodass dasselbe Objekt, das auf zwei Arten serialisiert wurde, Zeile für Zeile unterschiedlich aussieht. Leerzeichen spielen keine Rolle, daher sehen ein hübsch gedrucktes Dokument und sein verkleinertes Gegenstück völlig unterschiedlich aus. Und Arrays sind positionell, sodass eine einzelne Einfügung jede folgende Zeile verschiebt und eine Kaskade falscher Unterschiede erzeugt, die die eine echte Änderung verbirgt.
Was für ein Strukturvergleich statt dessen berichtet
Ein JSON-Diff analysiert beide Dokumente, durchläuft die resultierenden Bäume und meldet Änderungen nach Pfad: hinzugefügte Schlüssel, entfernte Schlüssel, Werte, deren Typ oder Inhalt geändert wurde, und Array-Einträge, die verschoben wurden. Die Ausgabe liest sich wie `spec.replicas: 3 → 5` und nicht wie zwanzig Zeilen verschobener Kontext. Das sind die Informationen, die Sie benötigen, wenn sich eine Bereitstellung anders verhält und Sie wissen möchten, was sich tatsächlich an der Konfiguration geändert hat.
- spec.template.spec.containers[0].image
+ ghcr.io/acme/web:1.4.2 → ghcr.io/acme/web:1.5.0
- metadata.annotations["deployed-by"] (removed)
Verwendung eines JSON-Diffs in der Praxis
- API Versionierung – Vergleichen Sie die v1- und v2-Antworten für dieselbe Anfrage und lesen Sie die Vertragsänderung direkt aus den Pfaden.
- Fehlgeschlagene Test-Snapshots – sehen Sie, welches Feld abweicht, anstatt den Snapshot neu zu generieren und zu hoffen.
- Überprüfung der Infrastruktur – Vergleich eines gerenderten Manifests vor und nach einem Diagramm-Upgrade.
- Migrationsprüfungen – bestätigen, dass ein Export nach einer Schema- oder Datenbankänderung alle Schlüssel beibehält.
Die Reihenfolge ist für Arrays wichtig und nicht für Objekte: Ein neu geordnetes Array ist eine echte Änderung, ein neu geordnetes Objekt hingegen nicht. Ein struktureller JSON-Diff kennt den Unterschied; Ein Textunterschied wird es niemals tun.
Praktische Details, die es zu wissen gilt
Beide Dokumente müssen JSON gültig sein, bevor ein Vergleich sinnvoll ist, daher sollten Validierungsfehler zuerst in Zeile und Spalte auftauchen. Achten Sie sowohl auf Typdrift als auch auf Wertdrift: `"3"` und `3` sehen fast identisch aus, brechen jedoch Verbraucher, die das eine oder das andere annehmen. Und wenn eine Seite leer oder ein einzelnes Objekt ist, während die andere ein Array ist, ist das normalerweise eher ein Zeichen für eine API-Formänderung als für eine Datenänderung. Ein JSON-Diff mit zwei Fenstern macht beide Seiten gleichzeitig sichtbar, was schneller ist als der Vergleich einer Datei mit einer gespeicherten Kopie.
Halten Sie die Nutzlasten lokal
Unterschiede sind genau die Dokumente, die Sie am wenigsten hochladen möchten: Produktionsantworten, Abrechnungsnutzlasten, Exporte mit Kundenzeilen. Der Vergleich im Browser bedeutet, dass die Analyse, der Tree Walk und die gerenderte Differenz alle auf Ihrem Computer stattfinden und das Tool auch dann weiterarbeitet, wenn keine Verbindung zum Netzwerk besteht.
JSON Diff – häufig gestellte Fragen
Beeinflusst die Tastenreihenfolge einen JSON-Diff?
Nein. Die Reihenfolge der Objektschlüssel ist in JSON nicht von Bedeutung, daher behandelt ein struktureller Unterschied neu angeordnete Schlüssel als unverändert. Wenn Ordnungsänderungen für Sie von Bedeutung sind, ist das eine JSON-mit-Ordnungs-Semantik – zum Beispiel eine serialisierte Karte – und gehört stattdessen in ein Array.
Wie vergleiche ich zwei ungültige JSON-Dateien?
Sie müssen zunächst gültig sein. Führen Sie beide durch einen JSON-Formatierer oder Validator, korrigieren Sie die gemeldete Zeile und Spalte und vergleichen Sie sie dann. Ein Diff über fehlerhafte Eingaben erzeugt Unterschiede, die eher Artefakte des Syntaxfehlers als echte Datenänderungen sind.
Kann ein JSON-Diff Werte anzeigen, die hinzugefügt oder entfernt wurden?
Ja – das ist der Hauptvorteil gegenüber einem Textdiff. Hinzugefügte und entfernte Pfade werden zusammen mit geänderten Werten und deren Typen explizit gemeldet, sodass eine entfernte Anmerkung genauso sichtbar ist wie ein geändertes Bild-Tag.
In diesem Beitrag erwähnte Tools
Weitere Artikel zum Lesen
6 Min. gelesen
JSON Formatierer: hübsch, minimiert und tatsächlich gültig
Ein JSON-Formatierer, der mit genauen Fehlerpositionen schön druckt, minimiert und validiert – plus die fünf Syntaxfehler, die fast jedem ungültigen JSON-Fehler zugrunde liegen.
6 Min. gelesen
JSON bis JSON Schema: von der Beispielnutzlast bis zum Vertrag
Konvertieren Sie JSON in JSON Schema im Browser: Leiten Sie einen Entwurf aus einer echten Nutzlast ab und härten Sie dann erforderliche Felder, Formate und Aufzählungen aus – plus die Grenzen der Inferenz.
- Längerer Artikel zum Lesen: YAML vs. JSON: Wann man welche verwendet (und wie man