Zum Hauptinhalt springen

JSON vergleichen

Dieses Tool ist eine semantische Vergleichs-Engine auf Client-Seite: Sie parst JSON-Payloads in Abstract Syntax Trees und ignoriert Schlüsselreihenfolge und bedeutungslosen Leerraum vollständig. Sie bietet konfigurierbares Array-Matching über einen Primärschlüssel, eine gesonderte Klassifizierung von Typwechseln, Ausführung in einem Web Worker, der bis zu 100 MB JSON verarbeitet, ohne den Tab einzufrieren, bidirektionalen Export und die Anwendung von RFC 6902 JSON Patch sowie ein optional zuschaltbares Drei-Wege-Merge, das zwei Branches gegen einen gemeinsamen Vorfahren zusammenführt – mit Konfliktauflösung pro Pfad.

Nur lokal

Semantischer Vergleich von links und rechts – Schlüsselreihenfolge und Leerraum werden ignoriert.

Linkes Dokument (Original)
0 B1 ZeileZ. 1, Sp. 1
Rechtes Dokument (geändert)
0 B1 ZeileZ. 1, Sp. 1
Warten auf Eingabe …Tastenkürzel: Alt+↓ weiter, Alt+↑ zurück

Keine Unterschiede vorhanden

Fügen Sie oben zwei JSON-Dokumente ein. Der Vergleich läuft in einem Web Worker, sodass die Seite auch bei großen Daten reagieren kann.

Wie funktioniert JSON vergleichen?

Übliche zeilenweise Diff-Tools (wie das klassische Unix diff ) scheitern an JSON, weil sie serialisierten Text vergleichen statt semantischer Daten. In JSON ist die Schlüsselreihenfolge laut RFC 8259 ausdrücklich beliebig: {"a":1,"b":2} und {"b":2,"a":1} repräsentieren identische Objekte, trotzdem markieren textuelle Diff-Engines sie als widersprüchliche Zeilen.

Die Diff-Engine von ToolsByUs löst das, indem sie auf geparsten Abstract Syntax Trees (AST) innerhalb eines isolierten Web Workers arbeitet. Sie normalisiert Objektschlüssel lexikografisch und implementiert drei konfigurierbare Array-Matching-Algorithmen:

  • Index-Matching: Richtet Array-Elemente strikt nach ihrer Ordnungsposition aus (Standard für Listen von Primitiven).
  • Schlüssel-Matching: Verknüpft Sammlungs-Entitäten über einen unveränderlichen Bezeichner (etwa id oder uuid ), sodass umgeordnete Listenelemente als Änderungen oder Verschiebungen erkannt werden statt als Schein-Churn aus Löschen und Neu-Hinzufügen.
  • Strukturelle Ähnlichkeit: Nutzt bipartites Maximum-Weight-Matching, um Objekte mit größter Feldübereinstimmung auszurichten.

Skalare Typwechsel (etwa ein String "42", der zur Zahl 42 wird) werden als eigene TYPE_CHANGE-Ereignisse erkannt statt als destruktive Ersetzungszyklen.

Beispieldokumente links und rechts

// Left:
{"id": 1, "tier": "free", "name": "Alpha"}

// Right:
{"name": "Alpha", "id": 1, "tier": "pro"}

Beispielausgabe

// Semantic Diff Result:
- tier: "free" (Removed)
+ tier: "pro" (Added)
= id: 1 (Unchanged)
= name: "Alpha" (Unchanged, key order ignored)

Beispieldokumente links und rechts → Beispielausgabe

Beispieldokumente links und rechts

{
  "id": 42,
  "name": "Ada",
  "tags": ["math", "code"],
  "active": true
}

Beispieldokumente links und rechts 2

{
  "name": "Ada Lovelace",
  "id": 42,
  "tags": ["math", "code", "analysis"],
  "active": false
}

Beispielausgabe

[
  {
    "op": "replace",
    "path": "/active",
    "value": false
  },
  {
    "op": "replace",
    "path": "/name",
    "value": "Ada Lovelace"
  },
  {
    "op": "add",
    "path": "/tags/2",
    "value": "analysis"
  }
]

Welche Optionen und Sonderfälle unterstützt JSON vergleichen?

Technische Referenz und Optionen
ParameterTypStandardVerhalten & Sonderfälle
Unabhängigkeit von der SchlüsselreihenfolgeInvarianteImmer aktivObjektschlüssel werden als mathematische Mengen verglichen. Unterschiedliche Schlüsselreihenfolgen erzeugen keine Diff-Änderungen.
Array-Matching: IndexModusStandardVergleicht Elemente streng nach nullbasiertem Index. Ideal für einfache Skalar-Arrays [1, 2, 3].
Array-Matching: SchlüsselModus'id'Vergleicht Objektelemente über Arrays durch einen benutzerdefinierten Primärschlüsseleigenschaft. Verhindert falsche Additionen bei Neuanordnung.
Array-Matching: ÄhnlichkeitModusScore > 0.4Heuristischer struktureller Vergleich basierend auf gemeinsamen Schlüsseln und primitiver Skalar-Gleichheit.
TypwechselklasseKategorieAktivKennzeichnung von Typübergängen ('' -> 1) als distincte TYPE_CHANGE-Operationen anstelle von delete+add.
Speicher-ObergrenzeLimit100 MBExplizite Obergrenze für In-Worker-Nutzlast, die vor Browser-Tab-Out-of-Memory-Crashes schützt.
Drei-Wege-MergeModusOpt-inBase + Ours + Theirs werden in der Seite zusammengeführt (8 MB Obergrenze); Konflikte fallen standardmäßig auf den Vorgängerwert zurück und werden pro Pfad live erneut aufgelöst.

Häufig gestellte Fragen

Warum spielt die Schlüsselreihenfolge beim JSON-Diff keine Rolle?

Laut der offiziellen JSON-Spezifikation (RFC 8259, Abschnitt 4) sind JSON-Objekte Sammlungen ungeordneter null oder mehr Name/Wert-Paare. Weil JSON-Encoder (etwa Python-Dictionaries oder die Iteration über Go-Maps) Schlüssel in nicht deterministischer Reihenfolge serialisieren, muss semantisches Diffing die Schlüsselreihenfolgen normalisieren, um falsche Unterschiede auszuschließen.

Wie funktioniert das Matching von Arrays über einen Schlüssel?

Bei Arrays von Datenbank-Modellen oder API-Datensätzen ändern Elemente oft ihre Reihenfolge oder werden gelöscht. Gibt man einen Primärschlüssel wie 'id' oder 'uuid' an, matcht die Diff-Engine linke und rechte Objekte mit gleichem Schlüsselwert unabhängig von der Array-Position und markiert präzise Feldänderungen, statt ganze Array-Ersetzungen zu melden.

Kann ich aus diesem Diff einen RFC 6902 JSON Patch erzeugen?

Ja. ToolsByUs erzeugt konforme RFC 6902 JSON Patch Arrays (mit den Operationen 'add', 'remove', 'replace' und 'move'), die sich mit einem Klick kopieren oder direkt auf Dokumente anwenden lassen. Der Patch ist garantiert Round-Trip-fähig: Wendet man den erzeugten Patch auf Ihr Originaldokument an, entsteht exakt das Zieldokument.

Wie geht das Drei-Wege-Merge mit widersprüchlichen Änderungen um?

Wechseln Sie zu „Drei-Wege-Merge“ und geben Sie den gemeinsamen Vorfahren unter Base an, dazu beide Branch-Dokumente. Änderungen, die nur eine Seite gemacht hat, werden automatisch zusammengeführt. Wo beide Seiten denselben Pfad berührt haben, vermerkt die Engine einen Konflikt, und die zusammengeführte Ausgabe nutzt den Base-Wert, bis Sie für diesen Pfad „Unsere Version“, „Andere Version“ oder „Basis“ wählen – jede Wahl löst die Ausgabe sofort neu auf, vollständig in Ihrem Browser.

Wird meine JSON-Payload an irgendeinen Backend-Server gesendet?

Nein. ToolsByUs ist eine statische Website ohne Backend. Parsing, AST-Durchlauf und Diff-Erzeugung laufen zu 100% im dedizierten Web-Worker-Thread Ihres Browsers. Netzwerkanfragen sind während des Ladens der Dokumente vollständig deaktiviert, verifiziert durch strikte automatisierte E2E-Tests.

Wie groß kann ein JSON-Dokument sein, das ich diffen kann, ohne dass der Tab einfriert?

Weil das gesamte rechenintensive Parsen und Durchlaufen in einem Web Worker läuft und Zeilen mit virtualisiertem Scrolling gerendert werden (nur die im Viewport sichtbaren Elemente existieren im DOM), bleibt die Oberfläche bei Dokumenten bis zur 100-MB-Grenze des Workers bedienbar. Ein 50-MB-Paar braucht trotzdem etliche Sekunden echter Arbeit – der Unterschied ist, dass Sie scrollen, tippen und abbrechen können, während es läuft, statt einem eingefrorenen Tab zuzusehen.

Was kann JSON vergleichen sonst noch?