JSON-Vergleichstool (Diff)

Fügen Sie zwei JSON-Dokumente ein und sehen Sie genau, was sich zwischen ihnen geändert hat - jeder hinzugefügte, entfernte oder geänderte Schlüssel, auf jeder Ebene, identifiziert durch seinen exakten Pfad wie user.address.city oder items[2].price. Anders als bei einem gewöhnlichen Text-Diff zählen Schlüsselreihenfolge und neu formatierte Leerzeichen hier nie als Unterschied - nur die tatsächlichen Daten zählen.

4 Unterschiede+2 hinzugefügt~2 geändert
  • Hinzugefügtdiscontinued

    + false

  • Geändertprice

    − 19.99

    + 24.99

  • Hinzugefügttags[2]

    + "sale"

  • Geändertversion

    − "1.2.0"

    + "1.3.0"

Der Vergleich erfolgt nach Struktur, nicht nach Zeile - das Umsortieren von Schlüsseln oder Neuformatieren von Leerzeichen erscheint nie als Unterschied, nur echte Datenänderungen.

Häufig gestellte Fragen

Wie unterscheidet sich das von einem gewöhnlichen Text-Diff?

Ein Text-Diff (wie der eigene Text-Diff-Checker dieser Seite) vergleicht zwei Textblöcke zeilenweise - er weiß nicht, was JSON ist, sodass das Umformatieren eines Dokuments, das Umsortieren seiner Schlüssel oder eine geänderte Einrückung eine Wand geänderter Zeilen erzeugt, selbst wenn die zugrunde liegenden Daten identisch sind. Dieses Tool parst zunächst beide Seiten als echtes JSON und vergleicht dann die resultierenden Strukturen - sodass {"a":1,"b":2} und eine formatierte Version mit "b" vor "a" korrekt als ohne Unterschiede gemeldet werden. Nur echte Hinzufügungen, Entfernungen und Wertänderungen werden angezeigt.

Was ist der Unterschied zwischen einem "geänderten" Wert und einem mit "geändertem Typ"?

"Geändert" bedeutet, dass der Wert an diesem Pfad noch denselben JSON-Typ hat, aber einen anderen Wert - eine Zahl, die von 5 auf 6 ging, oder ein String, der von "Entwurf" zu "veröffentlicht" wurde. "Typ geändert" bedeutet, dass der Typ selbst anders ist - ein Feld, das ein Boolean war, ist jetzt ein String, oder eine Zahl wurde zu null. Diese Unterscheidung ist in der Praxis sehr wichtig: Eine Typänderung bricht mit viel höherer Wahrscheinlichkeit Code, der dieses Feld liest (eine Funktion, die einen Boolean erwartet, verhält sich fehlerhaft, wenn sie plötzlich einen String erhält), daher markiert dieses Tool sie separat, statt sie mit einer gewöhnlichen Wertaktualisierung zu vermischen.

Wie werden Arrays verglichen?

Element für Element, der Reihe nach: Index 0 gegen Index 0, Index 1 gegen Index 1 und so weiter, wobei zusätzliche Elemente am Ende des längeren Arrays als hinzugefügt oder entfernt gemeldet werden. Das ist einfach und vorhersehbar, bedeutet aber, dass das Einfügen eines neuen Elements in der Mitte eines Arrays alle nachfolgenden Elemente als geändert erscheinen lässt, obwohl sie eigentlich identisch sind - weil sie alle um eine Position verschoben wurden. Das ist eine echte Einschränkung positionsbasierter Array-Vergleiche im Allgemeinen (nicht nur bei diesem Tool), daher hilft es bei Arrays, deren Reihenfolge sich ändern kann, oft zu prüfen, ob die gemeldeten "geänderten" Elemente wirklich unterschiedlich sind oder nur verschoben wurden.

Was passiert, wenn mein JSON ungültig ist?

Die genaue Parse-Fehlermeldung, die der JSON-Parser Ihres eigenen Browsers erzeugt, wird unter diesem Textfeld angezeigt, statt stillschweigend zu scheitern oder ein veraltetes Ergebnis zu zeigen. Häufige Ursachen sind ein überzähliges Komma nach dem letzten Element in einem Objekt oder Array (in JavaScript-Objektliteralen gültig, in JSON ungültig), fehlende Anführungszeichen um einen Schlüsselnamen, oder ein verirrter Kommentar - JSON hat im Gegensatz zu JavaScript oder JSON5 überhaupt keine Kommentarsyntax.

Kann ich damit API-Antworten vergleichen?

Ja, und das ist einer der nützlichsten Anwendungsfälle: Fügen Sie eine vor einer Änderung erfasste Antwort und eine danach erfasste Antwort ein, und jedes hinzugefügte, entfernte oder - entscheidend - im Typ geänderte Feld wird markiert. Ein Feld, das sich stillschweigend von einer Zahl zu einem String ändert, oder von einem Boolean zu null, ist genau die Art von breaking change, die in zwei großen Payloads mit bloßem Auge leicht zu übersehen ist, hier aber sofort als eigener "Typ geändert"-Eintrag erscheint.

Spielt die Reihenfolge, in der Schlüssel erscheinen, eine Rolle?

Nein, nie - zwei JSON-Objekte mit denselben Schlüsseln und Werten werden unabhängig von der Reihenfolge, in der diese Schlüssel geschrieben sind, als identisch behandelt, da JSON selbst der Schlüsselreihenfolge keine Bedeutung zuweist. Das bedeutet auch, dass ein minifiziertes, einzeiliges JSON-Dokument und eine schön eingerückte, mehrzeilige Version genau derselben Daten hier korrekt null Unterschiede zeigen.

Werden meine JSON-Daten irgendwohin gesendet?

Nein. Beide Dokumente werden vollständig in Ihrem Browser mit reinem JavaScript geparst und verglichen - nichts wird an einen Server hochgeladen, sodass Sie bedenkenlos echte API-Antworten, Konfigurationsdateien oder andere Daten einfügen können, die Ihr Gerät nicht verlassen sollen.

Kann ich sehr große JSON-Dateien vergleichen?

Es verarbeitet typische API-Antworten und Konfigurationsdateien - von wenigen Zeilen bis zu mehreren Tausend - problemlos, da der gesamte Vergleich synchron in Ihrem Browser-Tab läuft. Bei wirklich riesigen Dokumenten (mehrere Dutzend Megabyte) kann der rekursive Durchlauf durch jeden Schlüssel und jeden Array-Index spürbar langsam werden; in diesem Fall hilft es meist, beide Dokumente vor dem Vergleich auf den Abschnitt zu kürzen, der Sie tatsächlich interessiert.

Kann das einen git diff für JSON-Konfigurationsdateien ersetzen?

Sie beantworten unterschiedliche Fragen und funktionieren gut zusammen statt als Ersatz füreinander. Ein Versionskontroll-Diff ist textbasiert - er zeigt die genauen Zeilen, die sich in der Datei geändert haben, einschließlich einer Umformatierung, Neueinrückung oder eines Linters, der Schlüssel umsortiert, was dieses Tool alles nicht als echten Unterschied betrachtet. Dieses Tool beantwortet eine engere, oft nützlichere Frage, nachdem ein Formatierer oder eine automatisch generierte Datei etwas berührt hat: Hat sich die tatsächliche Konfiguration geändert, oder nur ihre Formatierung? Beide zusammen auf einen verdächtigen Commit anzuwenden, ist eine schnelle Möglichkeit, "nichts zu befürchten, nur umformatiert" von "das ändert wirklich das Verhalten" zu unterscheiden.

Was, wenn die beiden Dokumente unterschiedliche Wurzeltypen haben, etwa ein Array gegenüber einem Objekt?

Es funktioniert trotzdem - wenn sich bereits die oberste Ebene in der Form unterscheidet (ein Objekt auf der einen, ein Array auf der anderen Seite, oder ein primitiver Wert gegenüber beidem), wird das als einzelner Unterschied auf Wurzelebene gemeldet, statt dass das Tool einen Vergleich erzwingt, der keinen Sinn ergibt. Dieselbe Logik, die die Typänderung eines verschachtelten Felds markiert, gilt auch für die Wurzel: Sie wird als die grundlegendste Art von Unterschied behandelt, die zwei JSON-Dokumente haben können.

Validiert oder formatiert das auch mein JSON?

Nur als Nebeneffekt - jede Seite wird zum Vergleich geparst, sodass ein ungültiges Dokument einen Parse-Fehler anzeigt, statt stillschweigend nichts zu vergleichen. Aber die Aufgabe dieses Tools ist es, zwei bereits gültige JSON-Dokumente zu vergleichen, nicht eines davon zu formatieren oder automatisch zu korrigieren. Wenn Sie ein einzelnes JSON-Dokument validieren, umformatieren oder minifizieren müssen, ist der JSON-Formatierer & Validator dieser Seite genau dafür gebaut und ein natürlicher erster Schritt, bevor Sie ein Dokument hier einfügen.

Ähnliche Tools