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-Vergleichswerkzeug, oft auch JSON-Diff-Werkzeug genannt, vergleicht zwei JSON-Werte (JavaScript Object Notation) und meldet, was sich zwischen ihnen geändert hat. Es listet jede Eigenschaft und jedes Array-Element auf, das hinzugefügt, entfernt oder geändert wurde, zusammen mit der genauen Position in den Daten. Diese Seite erklärt, wie das JSON-Vergleichswerkzeug von whiz.tools funktioniert, mit Beispielen, die auf seiner tatsächlichen Vergleichslogik beruhen.
Was ist ein JSON-Vergleich?
Ein JSON-Vergleich ist der Vorgang, zwei JSON-Dokumente gegeneinander zu prüfen, um Unterschiede zu finden. Ein JSON-Dokument ist ein Text, der aus Objekten (Schlüssel-Wert-Paare in geschweiften Klammern), Arrays (geordnete Listen in eckigen Klammern) und einfachen Werten wie Zeichenketten, Zahlen, booleschen Werten und null aufgebaut ist. Zwei solche Dokumente mit bloßem Auge zu vergleichen, ist langsam und fehleranfällig, sobald sie länger als ein paar Zeilen sind. Ein Vergleichswerkzeug erledigt den Abgleich daher automatisch und hebt jede Änderung hervor.
Entwickler nutzen diese Art von Vergleich, 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.
So vergleicht das Werkzeug zwei JSON-Werte
Das Werkzeug liest beide Eingaben mit einem Standard-JSON-Parser ein und geht dann die beiden entstandenen Werte gemeinsam Ebene fĂĽr Ebene durch. Bei jedem Schritt stellt es der Reihe nach drei Fragen:
- Haben die beiden Werte verschiedene Typen (zum Beispiel ist einer ein Objekt und der andere eine Zahl), oder ist einer
null, der andere aber nicht? Wenn ja, wird an dieser Stelle eine Änderung festgehalten, und der Vergleich geht nicht tiefer. - Sind beide Werte einfache Werte (eine Zeichenkette, Zahl, ein boolescher Wert oder null)? Wenn ja, werden sie direkt verglichen. Jeder Unterschied zählt als Änderung, auch der Wechsel von der Zahl
123zur Zeichenkette"123". - Sind beide Werte Objekte oder beide Arrays? Wenn ja, werden ihre Inhalte nach den folgenden Regeln verglichen, und das Werkzeug steigt rekursiv in verschachtelte Objekte und Arrays hinab.
Jeder Unterschied wird mit einem Pfad festgehalten, etwa user.address.city oder tags[1], damit er sich im Originaldokument leicht finden lässt.
Objekte vergleichen
Bei zwei JSON-Objekten sammelt das Werkzeug jeden SchlĂĽssel, der in 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, vergleicht das Werkzeug die beiden Werte rekursiv.
Die Reihenfolge der SchlĂĽssel spielt keine Rolle. Der JSON-Standard definiert ein Objekt als ungeordnete Sammlung von Name-Wert-Paaren und ein Array als geordnete Folge. Deshalb werden {"a":1,"b":2} und {"b":2,"a":1} als identisch behandelt.
Arrays vergleichen
Arrays werden nach Position verglichen, nicht nach Inhalt. Das Werkzeug geht beide Arrays Index für Index durch und vergleicht, was an jedem Index steht, 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 bedeutet, dass das Werkzeug nie versucht, Array-Elemente anhand ihres Inhalts zuzuordnen. Es bemerkt nicht, dass ein Objekt von Index 1 auf Index 2 „verschoben“ wurde; es sieht nur, dass sich der Wert an jedem Index geändert hat. Wird ein Element in der Mitte eines Arrays gelöscht oder eingefügt, verschiebt sich jedes folgende Element um eine Position. Das erscheint daher meist als mehrere einzelne Änderungen und nicht als eine saubere Ergänzung oder Entfernung.
Beispiele
Beispiel 1: Vergleich zweier Objekte
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: eine Array-Änderung am Ende
Erstes JSON:
1{ "tags": ["important", "urgent", "review"] }
2Zweites JSON:
1{ "tags": ["important", "critical", "review", "documentation"] }
2Der Index 0 ist unverändert, der Index 1 hat sich geändert, der Index 2 ist unverändert, und der 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, da dies eine häufige Quelle von Verwirrung ist.
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}
8Wer sich das ansieht, würde sagen: „Mouse wurde entfernt und Monitor wurde hinzugefügt.“ Da das Werkzeug strikt nach Index vergleicht, sieht es das nicht so. Es vergleicht Index 0 mit Index 0, Index 1 mit Index 1 und Index 2 mit Index 2, sodass jedes Feld nach dem gelöschten Element zum falschen Objekt passt. 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
Um bei solchen Listen ein ĂĽbersichtlicheres Ergebnis zu erhalten, sortieren Sie beide Arrays vor dem EinfĂĽgen auf dieselbe Weise oder ordnen Sie sie ĂĽber einen SchlĂĽssel, zum Beispiel indem Sie jede Liste in derselben Reihenfolge schreiben oder Objekte vor dem Vergleich anhand eines ID-Felds zuordnen.
Was das Werkzeug nicht leistet
- Es ordnet Array-Elemente nicht anhand ihres Inhalts zu. Wie oben gezeigt, vergleicht es ausschließlich nach Indexposition und kann daher nicht erkennen, dass ein Element verschoben und nicht geändert wurde.
- Es erkennt keine zirkulären Verweise. In der Praxis ist das keine Einschränkung: Beide Eingaben stammen von
JSON.parse, das immer einen einfachen Baum erzeugt und nie einen Wert liefern kann, der auf sich selbst verweist. Zirkuläre Verweise können in gültigem JSON-Text von vornherein nicht vorkommen. - Es bietet keine Einstellung, um Arrays vor dem Vergleich zu sortieren. Die Elemente in Ihrer Eingabe vor dem Einfügen umzuordnen, ist die einzige Möglichkeit, den oben beschriebenen Index-Verschiebungseffekt zu vermeiden.
Verwendung des Werkzeugs
- FĂĽgen Sie das erste JSON-Dokument in das linke Feld und das zweite in das rechte Feld ein.
- Das Werkzeug vergleicht beide automatisch, sobald beide Felder Text enthalten, oder Sie klicken auf „Vergleichen“, um den Vergleich manuell zu starten.
- Lesen Sie die Ergebnisliste. Jede Zeile zeigt einen Pfad, etwa
user.age, und ob der Wert hinzugefügt, entfernt oder geändert wurde, wobei der alte und der neue Wert nebeneinander angezeigt werden. - Klicken Sie auf „Kopieren“, um die Ergebnisse als reinen Text zu kopieren.
Enthält eines der Felder Text, der kein gültiges JSON ist, zeigt das Werkzeug für dieses Feld eine Fehlermeldung statt eines Vergleichs an.
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 vorkommt oder in beiden vorkommt, aber einen anderen Wert oder einen anderen Typ hat. Wird ein Wert von der Zahl 5 zur Zeichenkette "5" geändert, zählt das als Änderung, auch wenn beide ähnlich aussehen.
Spielt die Reihenfolge der Objekteigenschaften eine Rolle? Nein. JSON-Objekte haben keine festgelegte Reihenfolge der Member. Zwei Objekte mit denselben SchlĂĽsseln und Werten in unterschiedlicher Reihenfolge werden daher als identisch behandelt.
Spielt die Reihenfolge der Array-Elemente eine Rolle? Ja. Arrays werden nach Indexposition verglichen. Wird ein Element an eine andere Position im Array verschoben, gilt das daher als Reihe von Änderungen und nicht als Verschiebung.
Werden meine JSON-Daten an einen Server gesendet? Nein. Der Vergleich läuft im Browser mit JavaScript. Es wird nichts hochgeladen.
Beeinflusst die Formatierung, etwa EinrĂĽckung oder Minifizierung, das Ergebnis? Nein. Beide Eingaben werden vor dem Vergleich in JSON-Werte umgewandelt, daher spielen Leerraum, EinrĂĽckung und ZeilenumbrĂĽche keine Rolle. Verglichen werden nur die eigentlichen Daten.
Kann das Werkzeug JSON mit Kommentaren oder nachgestellten Kommas vergleichen? Nein. Standard-JSON nach RFC 8259 kennt keine Syntax fĂĽr Kommentare, und Arrays und Objekte dĂĽrfen keine nachgestellten Kommas enthalten. Der JSON-Parser des Browsers lehnt solche Eingaben als ungĂĽltig ab.
Referenzen
- Internet Engineering Task Force. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format. RFC 8259 – Objekte sind ungeordnete Sammlungen von Name-Wert-Paaren, Arrays sind geordnete Folgen, und die Grammatik erlaubt zwischen Tokens nur Leerraum.
- Mozilla Developer Network. JSON.parse(). JSON.parse()-Referenz – Ungültiges JSON löst einen SyntaxError aus, und Arrays und Objekte dürfen keine nachgestellten Kommas enthalten.