Zum Inhalt springen

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

Ladekalkulator...
📚

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:

  1. 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.
  2. 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 123 zur Zeichenkette "123".
  3. 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" } } }
2

Zweites JSON:

1{ "user": { "address": { "city": "Boston", "zip": "02108" } } }
2

Ergebnis:

  • 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"] }
2

Zweites JSON:

1{ "tags": ["important", "critical", "review", "documentation"] }
2

Der 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}
8

Zweites 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}
8

Wer 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

  1. FĂĽgen Sie das erste JSON-Dokument in das linke Feld und das zweite in das rechte Feld ein.
  2. Das Werkzeug vergleicht beide automatisch, sobald beide Felder Text enthalten, oder Sie klicken auf „Vergleichen“, um den Vergleich manuell zu starten.
  3. 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.
  4. 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

  1. 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.
  2. 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.