JSON vergleichen: Unterschiede zwischen zwei JSON-Dokumenten
Zwei JSON-Dokumente Feld für Feld vergleichen; jeder hinzugefügte, entfernte und geänderte Wert erscheint mit seinem Pfad
Ihre Daten bleiben bei Ihnen. Die Umwandlung läuft im Browser; nichts wird an einen Server gesendet.
Hat dieses Werkzeug geholfen?
Danke, Ihre Rückmeldung ist angekommen.
So funktioniert es
Fügen Sie das alte JSON links und das neue JSON rechts ein; die Unterschiede erscheinen sofort darunter. Möchten Sie nur ein Feld nutzen, setzen Sie zwischen beide Dokumente eine Zeile, die nur --- enthält. Das Zeichen am Zeilenanfang sagt, was passiert ist: + Feld hinzugefügt, - Feld entfernt, ~ Wert geändert. Im Beispiel sinkt der Preis von 29.9 auf 24.9, die Postleitzahl des Händlers fehlt, bei den Tags kommt "Angebot" hinzu und der Bestand steht jetzt in Anführungszeichen; das Ergebnis lautet "~ $.preis: 29.9 → 24.9", "- $.haendler.plz", "+ $.tags[2]" und "~ $.bestand: 42 → \"42\"" mit Hinweis auf den Typwechsel. In welcher Reihenfolge die Schlüssel stehen und wie eingerückt ist, zählt nicht. Hat sich in einer Liste nur die Reihenfolge geändert, stellen Sie "Reihenfolge in Arrays" auf "Unwichtig". Ist eines der Dokumente fehlerhaft, nennt das Werkzeug welches und in welcher Zeile des Feldes.
Dieses Werkzeug ist auch als json vergleichen, zwei json vergleichen, json dateien vergleichen, json unterschiede finden, json diff, json compare bekannt.
Was ist JSONPath (Pfad)?
Ein JSON-Pfad ist die Adresse eines Wertes im Dokument. $ steht für die Wurzel, ein Punkt öffnet ein Unterfeld, eine Zahl in eckigen Klammern wählt ein Listenelement: $.haendler.name ist das Namensfeld des Händler-Objekts, $.tags[2] das dritte Tag (gezählt wird ab 0). Schlüssel mit Leerzeichen oder Bindestrich werden als $["vor name"] geschrieben. Weil jeder Unterschied mit einem solchen Pfad gemeldet wird, müssen Sie die Stelle in einem großen Dokument nicht suchen.
Was ist JSON-Diff?
Ein JSON-Diff vergleicht zwei JSON-Dokumente als Daten und listet auf, was hinzugefügt, entfernt oder geändert wurde. Anders als ein zeilenweiser Textvergleich ignoriert er Formatierung, Einrückung und Schlüsselreihenfolge, achtet aber auf den Datentyp jedes Wertes. Entwickler sehen damit, wie sich eine API-Antwort zwischen Versionen verändert hat, warum sich zwei Umgebungen mit ihren Konfigurationsdateien unterschiedlich verhalten oder welche Datensätze ein Export aktualisiert hat.
Was unterscheidet einen JSON-Vergleich von einem Textvergleich?
Ein Textvergleich behandelt beide Dateien als Zeichenketten und vergleicht Zeile für Zeile; schon eine andere Einrückung oder Schlüsselreihenfolge gilt als Unterschied. Ein JSON-Vergleich liest beide Dokumente zuerst als Baum ein und vergleicht die Werte unter demselben Pfad; die Formatierung zählt nicht, Typwechsel wie 42 zu "42" werden dagegen erkannt. Für Verträge, Artikel und Fließtext nehmen Sie den Textvergleich, für API-Antworten und Konfigurationsdateien den JSON-Vergleich.
Warum ein zeilenweiser Vergleich bei JSON in die Irre führt
Gewöhnliche Textvergleiche arbeiten zeilenweise. Dasselbe JSON kann aus einem Programm mit alphabetisch sortierten Schlüsseln kommen und aus einem anderen in Einfügereihenfolge, einmal einzeilig, einmal eingerückt. Ein Zeilenvergleich meldet dann Hunderte Unterschiede, obwohl die Daten gleich sind. Dieses Werkzeug wandelt beide Dokumente zuerst in einen Baum um und vergleicht die Werte unter demselben Pfad; die Schreibweise erreicht das Ergebnis nie.
Umgekehrt fällt eine Zahl, die zu Text wurde, leicht durch: 42 und "42" sehen fast gleich aus, doch das Programm, das das JSON liest, erwartet einmal eine Zahl und einmal Text. Das Werkzeug schreibt den Typwechsel deshalb an das Zeilenende (Zahl → Text).
- {"a":1,"b":2} und {"b":2,"a":1} → kein Unterschied
- [1,2] und [2,1] → 2 Änderungen, wenn die Reihenfolge wichtig ist, sonst keine
- 18 und "18" → ~ geändert, Typ: Zahl → Text
Welche Einstellung wann
Trägt die Reihenfolge einer Liste in einer API-Antwort Bedeutung (sortierte Suchergebnisse, Schritte, Seiten), lassen Sie "Wichtig" stehen; verglichen wird Position für Position. Wirkt die Liste wie eine Menge (Tags, Berechtigungen, Verteiler), wählen Sie "Unwichtig"; ein Element passt, wo immer es steht, und nur wirklich hinzugefügte oder entfernte Elemente bleiben übrig.
Für einen Änderungsbericht genügt "Nur Unterschiede". Wollen Sie zwei Konfigurationsdateien komplett durchsehen, wählen Sie "Alle Felder"; unveränderte Werte erscheinen dann eingerückt mit. Sehr große Ganzzahlen (über 2^53, etwa 19-stellige IDs) kann JavaScript runden; trifft das Werkzeug auf eine solche Zahl, warnt es in der Ergebniszeile.
Häufige Fragen
Wie vergleiche ich zwei JSON-Dateien?
Fügen Sie das erste JSON links und das zweite rechts ein. Das Werkzeug vergleicht beide als Baum und nennt jeden Unterschied mit Pfad: "~ $.preis: 29.9 → 24.9" heißt, der Preis hat sich geändert, "- $.haendler.plz" heißt, das Feld wurde entfernt.
Zählt eine andere Reihenfolge der Schlüssel als Unterschied?
Nein. In einem JSON-Objekt hat die Reihenfolge der Schlüssel keine Bedeutung; {"a":1,"b":2} und {"b":2,"a":1} enthalten dieselben Daten, und das Werkzeug meldet keinen Unterschied. Einrückung, Leerzeichen und Zeilenumbrüche werden ebenfalls ignoriert.
Kann ich die Reihenfolge in Arrays ignorieren?
Ja. Stellen Sie "Reihenfolge in Arrays" auf "Unwichtig". Dann gelten ["a","b"] und ["b","a"] als gleich, und nur Elemente, die in einer Liste vorkommen und in der anderen nicht, erscheinen mit + oder -.
Wird das eingefügte JSON irgendwohin gesendet?
Nein. Der Vergleich läuft vollständig in Ihrem Browser; auch ein JSON mit API-Schlüsseln oder Kundendaten erreicht keinen Server.