JSON-Vergleichstool - JSON Online Kostenlos Vergleichen | JSON Diff
Vergleichen Sie JSON online kostenlos mit unserem schnellen JSON-Vergleichstool. Finden Sie Unterschiede sofort mit farbcodierten Ergebnissen. 100% sicher, browserbasierende JSON-Diff. Keine Anmeldung erforderlich.
JSON Diff Werkzeug
Dokumentation
Ein JSON-Vergleichstool, oft auch JSON-Diff-Tool genannt, vergleicht zwei JSON-Werte (JavaScript Object Notation) und zeigt, was sich zwischen ihnen geändert hat. Es listet jede Eigenschaft und jedes Array-Element auf, das hinzugefügt, entfernt oder geändert wurde, einschließlich der genauen Position in den Daten. Diese Seite erklärt, wie das JSON-Vergleichstool von whiz.tools funktioniert, und verwendet dafür Beispiele auf Grundlage seiner tatsächlichen Vergleichslogik.
Was ist ein JSON-Vergleich?
Beim JSON-Vergleich werden zwei JSON-Dokumente miteinander abgeglichen, um Unterschiede zu finden. Ein JSON-Dokument ist ein Text, der aus Objekten (Schlüssel-Wert-Paaren in geschweiften Klammern), Arrays (geordneten Listen in eckigen Klammern) und primitiven Werten wie Zeichenketten, Zahlen, booleschen Werten und null besteht. Zwei solche Dokumente per Hand zu vergleichen, ist langsam und fehleranfällig, sobald sie über wenige Zeilen hinausgehen. Ein Vergleichstool übernimmt die Zuordnung automatisch und hebt jede Änderung hervor.
Entwickler verwenden solche Vergleiche, um API-Antworten zu prüfen, Änderungen in Konfigurationsdateien nachzuverfolgen, sicherzustellen, dass bei einer Datenmigration keine Informationen verloren gingen, und Änderungen an JSON-Dateien in der Versionsverwaltung zu überprüfen.
Wie das Tool zwei JSON-Werte vergleicht
Das Tool verarbeitet beide Eingaben zunächst mit einem standardmäßigen JSON-Parser. Anschließend durchläuft es die daraus entstandenen Werte gemeinsam, eine Ebene nach der anderen. Bei jedem Schritt stellt es nacheinander drei Fragen:
- Haben die beiden Werte unterschiedliche Typen (zum Beispiel ist einer ein Objekt und der andere eine Zahl), oder ist einer
null, während der andere es nicht ist? In diesem Fall wird an dieser Stelle eine Änderung erfasst und der Vergleich in tieferen Ebenen beendet. - Sind beide Werte primitiv (eine Zeichenkette, Zahl, ein boolescher Wert oder
null)? Dann werden sie direkt verglichen. Jede Abweichung zählt als Änderung, auch der Wechsel von der Zahl123zur Zeichenkette"123". - Sind beide Werte Objekte oder beide Arrays? Dann vergleicht das Tool ihre Inhalte nach den folgenden Regeln und ruft den Vergleich für verschachtelte Objekte oder Arrays erneut auf.
Jeder Unterschied wird mit einem Pfad erfasst, zum Beispiel user.address.city oder tags[1]. Dadurch lässt sich die betreffende Stelle im ursprünglichen Dokument leicht finden. Objektmitglieder werden durch Punkte verbunden, Array-Elemente mit ihrem Index in eckigen Klammern angegeben. Ein Unterschied ganz oben im Dokument, etwa wenn ein Array durch ein Objekt ersetzt wurde, hat keinen Pfad innerhalb der Daten und wird daher mit $ bezeichnet. Dabei handelt es sich um den vom RFC 9535, dem JSONPath-Standard, definierten Bezeichner für die Wurzel. Er steht für das gesamte Dokument.
Objekte vergleichen
Bei zwei JSON-Objekten ermittelt das Tool jeden Schlüssel, der in mindestens einem der beiden Objekte vorkommt. Für jeden Schlüssel gilt:
- Existiert der Schlüssel nur im zweiten Objekt, handelt es sich um eine hinzugefügte Eigenschaft.
- Existiert der Schlüssel nur im ersten Objekt, handelt es sich um eine entfernte Eigenschaft.
- Existiert der Schlüssel in beiden Objekten, vergleicht das Tool die beiden Werte rekursiv.
Die Reihenfolge der Schlüssel spielt keine Rolle. Der JSON-Standard legt keine Reihenfolge für Objektmitglieder fest. Deshalb werden {"a":1,"b":2} und {"b":2,"a":1} als identisch behandelt.
Arrays vergleichen
Arrays werden nach ihrer Position und nicht nach ihrem Inhalt verglichen. Das Tool geht beide Arrays Index für Index durch und vergleicht die Werte an den jeweiligen Positionen, bis zur Länge des längeren Arrays. Ist ein Array kürzer, werden die zusätzlichen Elemente am Ende des längeren Arrays als hinzugefügt oder entfernt gemeldet.
Das Tool versucht also niemals, Array-Elemente anhand ihres Inhalts einander zuzuordnen. Es erkennt nicht, dass ein Objekt von Index 1 an Index 2 "verschoben" wurde, sondern stellt nur fest, dass sich der Wert an den jeweiligen Positionen geändert hat. Wird ein Element in der Mitte eines Arrays gelöscht oder eingefügt, verschieben sich alle folgenden Elemente um eine Position. Daher wird dies meist als mehrere einzelne Änderungen und nicht als eine einzige eindeutige Hinzufügung oder Entfernung angezeigt.
Beispiele
Beispiel 1: Zwei Objekte vergleichen
Erstes JSON:
1{ "user": { "address": { "city": "New York", "zip": "10001" } } }
2Zweites JSON:
1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2Ergebnis:
- Geändert
user.address.city:"New York"→"Boston" - Geändert
user.address.zip:"10001"→"02108"
Beispiel 2: Änderung am Ende eines Arrays
Erstes JSON:
1{ "tags": ["important", "urgent", "review"] }
2Zweites JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2Index 0 ist unverändert, Index 1 wurde geändert, Index 2 ist unverändert und Index 3 existiert nur im zweiten Array. Ergebnis:
- Geändert
tags[1]:"urgent"→"critical" - Hinzugefügt
tags[3]:"documentation"
Beispiel 3: Ein Element aus der Mitte eines Arrays entfernen
Dieses Beispiel zeigt, was passiert, wenn ein Element aus der Mitte eines Arrays entfernt wird. Das sorgt häufig für Verwirrung.
Erstes JSON:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 999.99 },
4 { "id": 2, "name": "Mouse", "price": 24.99 },
5 { "id": 3, "name": "Keyboard", "price": 59.99 }
6 ]
7}
8Zweites JSON, bei dem der Eintrag "Mouse" gelöscht und am Ende ein Eintrag "Monitor" hinzugefügt wurde:
1{
2 "products": [
3 { "id": 1, "name": "Laptop", "price": 899.99 },
4 { "id": 3, "name": "Keyboard", "price": 59.99 },
5 { "id": 4, "name": "Monitor", "price": 349.99 }
6 ]
7}
8Eine Person würde beim Betrachten der Daten sagen: "Mouse wurde entfernt und Monitor wurde hinzugefügt." Da das Tool jedoch strikt nach Index vergleicht, kommt es zu einem anderen Ergebnis. Es vergleicht Index 0 mit Index 0, Index 1 mit Index 1 und Index 2 mit Index 2. Deshalb wird jedes Feld nach dem gelöschten Element dem falschen Objekt gegenübergestellt. Das tatsächliche Ergebnis sind sieben Änderungen:
- Geändert
products[0].price:999.99→899.99 - Geändert
products[1].id:2→3 - Geändert
products[1].name:"Mouse"→"Keyboard" - Geändert
products[1].price:24.99→59.99 - Geändert
products[2].id:3→4 - Geändert
products[2].name:"Keyboard"→"Monitor" - Geändert
products[2].price:59.99→349.99
Für ein übersichtlicheres Ergebnis beim Vergleich solcher Listen sollten beide Arrays vor dem Einfügen auf dieselbe Weise sortiert oder strukturiert werden, zum Beispiel indem jede Liste in derselben Reihenfolge geschrieben wird oder die Objekte vor dem Vergleich anhand eines ID-Felds einander zugeordnet werden.
Was das Tool nicht tut
- Es ordnet Array-Elemente nicht anhand ihres Inhalts einander zu. Wie oben gezeigt, vergleicht es ausschließlich nach der Indexposition. Daher kann es nicht erkennen, dass ein Element verschoben und nicht geändert wurde.
- Es erkennt keine Zirkelverweise. In der Praxis ist dies keine Einschränkung: Beide Eingaben stammen aus
JSON.parse, das immer einen einfachen Baum erstellt und niemals einen Wert erzeugen kann, der auf sich selbst zurückverweist. In gültigem JSON-Text können Zirkelverweise grundsätzlich nicht vorkommen. - Es bietet keine Einstellung zum Sortieren von Arrays vor dem Vergleich. Die Elemente vor dem Einfügen in der Eingabe neu anzuordnen, ist die einzige Möglichkeit, den oben beschriebenen Effekt der Indexverschiebung zu vermeiden.
So wird das Tool verwendet
- Das erste JSON-Dokument in das linke Feld und das zweite in das rechte Feld einfügen.
- Das Tool vergleicht die Dokumente automatisch, sobald beide Felder Text enthalten. Alternativ auf „Vergleichen“ klicken, um den Vergleich manuell zu starten.
- Die Ergebnisliste prüfen. Jede Zeile zeigt einen Pfad wie
user.agesowie die Information, ob ein Wert hinzugefügt, entfernt oder geändert wurde. Der alte und der neue Wert werden nebeneinander angezeigt. - Auf „Kopieren“ klicken, um die Ergebnisse als einfachen Text zu kopieren.
Enthält ein Feld Text, der kein gültiges JSON darstellt, zeigt das Tool unter diesem Feld einen Fehler anstelle eines Vergleichs. Sind beide Felder ungültig, werden beide Fehler gleichzeitig angezeigt.
Häufig gestellte Fragen
Was gilt als Unterschied zwischen zwei JSON-Werten?
Eine Eigenschaft oder ein Array-Element unterscheidet sich, wenn es nur in einem der beiden Dokumente existiert oder wenn es in beiden vorhanden ist, aber einen anderen Wert oder einen anderen Typ hat. Die Änderung von der Zahl 5 zur Zeichenkette "5" gilt als Änderung, auch wenn die beiden Werte ähnlich aussehen können.
Spielt die Reihenfolge der Elemente eine Rolle?
Das hängt vom Container ab. JSON-Objekte haben keine festgelegte Reihenfolge ihrer Mitglieder. Zwei Objekte mit denselben Schlüsseln und Werten werden daher auch bei unterschiedlicher Reihenfolge als identisch behandelt. Arrays sind geordnet. Das Tool vergleicht sie nach ihrer Indexposition. Wird ein Element an eine andere Position verschoben, wird dies daher als eine Reihe von Änderungen und nicht als Verschiebung gemeldet.
Was bedeutet ein Ergebnispfad mit $?
Er bedeutet, dass sich das gesamte Dokument und nicht nur ein Teil davon geändert hat. Dies geschieht, wenn die beiden Eingaben auf der obersten Ebene unterschiedliche Wertarten haben, zum Beispiel wenn sich auf einer Seite ein Array und auf der anderen ein Objekt befindet oder wenn die einfachen Zahlen 1 und 2 verglichen werden. $ ist der Bezeichner für die Wurzel aus RFC 9535, dem JSONPath-Standard.
Werden meine JSON-Daten an einen Server gesendet?
Nein. Der Vergleich wird mit JavaScript im Browser ausgeführt. Es werden keine Daten hochgeladen.
Beeinflusst die Formatierung, etwa Einrückung oder Minifizierung, das Ergebnis?
Nein. Beide Eingaben werden vor dem Vergleich in JSON-Werte umgewandelt. Leerzeichen, Einrückungen und Zeilenumbrüche haben daher keinen Einfluss. Verglichen werden nur die eigentlichen Daten.
Kann das Tool JSON mit Kommentaren oder nachgestellten Kommas vergleichen?
Nein. Standard-JSON gemäß RFC 8259 erlaubt weder Kommentare noch nachgestellte Kommas. Eingaben, die solche Elemente enthalten, werden als ungültig abgelehnt.
Quellen
- IETF. „Das Datenaustauschformat JavaScript Object Notation (JSON).“ RFC 8259, Dezember 2017.
- IETF. „JavaScript Object Notation (JSON) Patch.“ RFC 6902, April 2013.
- IETF. „JSONPath: Abfrageausdrücke für JSON.“ RFC 9535, Februar 2024. (Abschnitt 2.2 definiert den Bezeichner für die Wurzel
$.) - Mozilla Developer Network. „JSON.parse().“