JSON-Diff
Compare two JSON documents structurally: added/removed keys, changed values and type changes with exact paths, ignoring key order.
JSON-Felder, Werte und Typänderungen auf einen Blick vergleichen
Was ist der Unterschied zwischen JSON-Diff und Textvergleich?
JSON-Diff parst zwei JSON-Dokumente zunächst als Objekte und vergleicht sie anschließend rekursiv. Dabei werden nur semantische strukturelle Unterschiede gemeldet. Jeder Unterschied enthält einen JSONPath, die Art der Änderung sowie den Wert davor und danach.
Eine andere Reihenfolge von Objektschlüsseln zählt nicht als Unterschied
Ein gewöhnlicher Textvergleich würde {"a":1,"b":2} und {"b":2,"a":1} als unterschiedliche Inhalte behandeln, weil die Zeichenreihenfolge verschieden ist. Semantisch sind die beiden JSON-Objekte jedoch gleich. JSON-Diff vergleicht Werte anhand ihrer Feldnamen, sodass eine Änderung der Schlüsselreihenfolge keinen Unterschied erzeugt.
Vier Arten von Unterschieden
Hinzufügung (ein Feld ist in B vorhanden, aber nicht in A), Löschung (ein Feld ist in A vorhanden, aber nicht in B), Wertänderung (der Wert am gleichen Pfad ist unterschiedlich) und Typänderung (zum Beispiel wird die Zahl 18 zum String 18). Arrays werden standardmäßig nach Index verglichen, verschachtelte Objekte und Arrays werden rekursiv verglichen. Die Differenzliste kann mit den vier Präfixen + / - / ~ / ! als reiner Text kopiert werden.
Wie liest man den Ergebnisbereich?
Die Ergebnistabelle enthält die vier Spalten Pfad, Typ, Wert von JSON A und Wert von JSON B. Pfade werden als JSONPath angegeben, zum Beispiel $.user.name oder $.list[0].id. Unterhalb der Tabelle wird ein vollständiges JSON der Unterschiede bereitgestellt, das jeden Unterschied als strukturiertes Array darstellt und direkt zur Analyse durch Entwickler kopiert werden kann. Die Statistik zeigt die Gesamtzahl der Unterschiede sowie hinzugefügte, gelöschte, geänderte und unveränderte Elemente. Typänderungen werden separat gekennzeichnet und nicht mit normalen Wertänderungen zusammengefasst.
Zwei Vergleichsoptionen
Mit „Reihenfolge von Arrays ignorieren“ werden Arrays als Mengen verglichen: [1,2] und [2,1] gelten dann als gleich. Das eignet sich beispielsweise für Listen von Tags oder Berechtigungen, bei denen die Reihenfolge keine Bedeutung hat. Mit „Leerzeichen am Anfang und Ende von Strings ignorieren“ werden führende und nachgestellte Leerzeichen sowie Zeilenumbrüche nicht berücksichtigt. Nach einer Änderung der Optionen wird der Vergleich sofort erneut ausgeführt. Die Optionen ändern nur die Vergleichsregeln und nicht die eingegebenen Inhalte.
Wie vergleicht man lokale Dateien?
Wechsle zum Tab für Datei-Uploads und ziehe zwei .json-Dateien jeweils in den linken und rechten Upload-Bereich oder wähle sie einzeln über die Dateiauswahl aus. Die Dateien werden mit FileReader direkt im Browser gelesen. Die maximale Größe beträgt 10 MB pro Datei. Sobald beide Seiten geladen sind, startet der Vergleich automatisch. Die Dateiinhalte verlassen den Browser nicht.
Häufige Ursachen für Unterschiede
Eine Umbenennung eines API-Feldes erscheint als Löschung und Hinzufügung an entsprechenden Pfaden. Eine Änderung eines Standardwerts wird als Wertänderung angezeigt. Wenn Boolean und String vermischt werden, zum Beispiel true und der String true, wird dies als Typänderung erkannt. Änderungen der Array-Reihenfolge werden ohne aktivierte Option zum Ignorieren der Reihenfolge einzeln aufgeführt. Prüfe zuerst den Pfad und anschließend den Typ, um die Ursache zu bestimmen. Wenn beide Daten vollständig identisch sind, zeigt der Ergebnisbereich direkt an, dass keine Unterschiede vorhanden sind, statt eine leere Tabelle anzuzeigen.
Ignoriert JSON-Diff die Reihenfolge von Objektschlüsseln?
JSON-Diff parst beide JSON-Dokumente zunächst als Objekte und vergleicht sie anschließend rekursiv. Eine andere Reihenfolge von Objektschlüsseln erzeugt daher keinen Unterschied. Gemeldet werden tatsächlich hinzugefügte oder gelöschte Felder, Wertänderungen und Typänderungen.
Jeder Unterschied enthält einen JSONPath wie $.user.name, sodass das betroffene API-Feld oder die entsprechende Stelle im Quellcode direkt gefunden werden kann.
- Zuerst parsen, dann vergleichen: Eine andere Reihenfolge von Objektschlüsseln wird nicht als Unterschied gewertet
- Unterschiede werden in Hinzufügungen, Löschungen, Wertänderungen und Typänderungen unterteilt und enthalten jeweils einen JSONPath
- Arrays können optional als Mengen verglichen werden, sodass [1,2] und [2,1] als gleich gelten
- Die Differenzliste kann mit den vier Präfixen + / - / ~ / ! als reiner Text kopiert werden
- Bei Datei-Uploads beträgt die maximale Größe 10 MB pro Datei; nach dem Laden beider Seiten startet der Vergleich automatisch
- Die gesamte Verarbeitung erfolgt lokal im Browser, Eingaben werden nicht auf den Server hochgeladen