So verwenden Sie es
- Fügen Sie das alte JSON in Linkes JSON und das neue JSON in Rechtes JSON ein.
- Setzen Sie den Haken bei Reihenfolge der Array-Einträge ignorieren, wenn die Arrays Mengen sind, etwa Listen von Tags.
- Lesen Sie die Tabelle Unterschiede durch. Jede Zeile nennt den Pfad (JSON Pointer) des Wertes. Kopieren Sie den JSON Patch, sobald Prüfung des Patchs meldet, dass er passt.
So werden die Dokumente verglichen
Die beiden Dokumente werden nach ihrem Wert verglichen. Die Reihenfolge der Namen in einem Objekt spielt keine Rolle, denn JSON beschreibt ein Objekt als Menge von Einträgen. Die Reihenfolge der Einträge in einem Array zählt dagegen, außer Sie setzen die Option, denn ein Array ist eine geordnete Liste.
Zahlen werden als Zahlen verglichen, daher sind 1 und 1.0 gleich. RFC 8259, Abschnitt 6, legt fest, dass ganze Zahlen von -(2^53)+1 bis (2^53)-1 von jeder Implementierung gleich gelesen werden. Eine längere ganze Zahl kann beim Lesen gerundet werden.
Pfade und der Patch
Ein Pfad ist ein JSON Pointer (RFC 6901): Jeder Schritt ist ein Name oder ein Index, getrennt durch einen Schrägstrich. Der erste Eintrag der Liste tags ist /tags/0, und der leere Pfad ist das ganze Dokument. Ein Schrägstrich im Namen wird als ~1 geschrieben, eine Tilde als ~0.
Der JSON Patch (RFC 6902) kennt drei Operationen: add, remove und replace. Entfernte Einträge eines Arrays werden von hinten nach vorn entfernt, damit jeder Index beim Anwenden noch stimmt. Neue Einträge werden mit dem Index "-" angehängt, den RFC 6902 als Ende des Arrays festlegt.
Die Reihenfolge von Arrays ignorieren
Mit gesetzter Option werden Einträge nach ihrem Wert zugeordnet, unabhängig von ihrer Position. Einträge ohne Partner werden als hinzugefügt oder entfernt gemeldet. Ein Array, das sich unterscheidet, wird im Patch ganz ersetzt, denn ein Patch, der nur Einträge verschiebt, müsste wissen, wie sie verschoben wurden. Der Patch gibt das Array dann in der Reihenfolge des rechten Dokuments aus.
Rechenbeispiel: die Standarddokumente
Das linke Dokument hat den Namen FireToolLand, die Version 1, die Tags json und csv und free auf true. Das rechte Dokument hat die Version 2, die Tags csv, json und yaml und eine license mit dem Wert null. In der Reihenfolge gelesen sind es sechs Unterschiede: version, die zwei geänderten Tags, der hinzugefügte Tag yaml, das entfernte free und die hinzugefügte license.
Mit gesetzter Option Reihenfolge der Array-Einträge ignorieren sind die Tags dieselben zwei Einträge in anderer Reihenfolge. Der einzige Tag-Unterschied ist yaml, und die Anzahl sinkt auf vier.
| Ergebnis | Standardtexte | Reihenfolge ignoriert |
|---|---|---|
| Anzahl der Unterschiede | 6 | 4 |
| Zusammenfassung | 2 hinzugefügt, 1 entfernt, 3 geändert. | 2 hinzugefügt, 1 entfernt, 1 geändert. |
Häufig gestellte Fragen
Warum ist die Reihenfolge der Array-Einträge wichtig?
In JSON ist ein Array eine geordnete Liste, [1,2] und [2,1] sind daher verschiedene Daten. Setzen Sie Reihenfolge der Array-Einträge ignorieren, wenn das Array eine Menge ist, etwa eine Liste von Tags oder Berechtigungen.
Was bedeutet ein Pfad wie /tags/0?
Es ist ein JSON Pointer (RFC 6901): der Eintrag tags, dann sein erster Eintrag, denn Indizes zählen ab 0. Der leere Pfad steht für das ganze Dokument, und ein Name mit einem Schrägstrich wird stattdessen mit ~1 geschrieben.
Sind 1 und 1.0 derselbe Wert?
Ja. Beides ist die Zahl eins, daher meldet die Seite keinen Unterschied. Ganze Zahlen über 2^53 kann ein JSON-Parser runden, vergleichen Sie lange Kennungen deshalb lieber als Text.
Wofür wird ein JSON Patch gebraucht?
Er ist eine Liste von Schritten (RFC 6902), die ein Server oder eine Bibliothek auf ein Dokument anwendet, um ein anderes zu erhalten, etwa um eine gespeicherte Einstellungsdatei zu aktualisieren. Die Prüfung des Patchs zeigt, dass die Schritte das richtige Dokument ergeben.
Warum wird ein ganzes Array ersetzt, wenn die Reihenfolge ignoriert wird?
Ohne Reihenfolge gibt es für ein geändertes Array keinen einzelnen Schritt, der es richtig umwandelt, ohne zu wissen, wie seine Einträge verschoben wurden. Der Patch schreibt daher das richtige Array vollständig.
Wird mein JSON irgendwohin geschickt?
Nein. Beide Texte werden in Ihrem Browser gelesen und verglichen. Was Sie einfügen, wird weder an einen Server gesendet noch dort gespeichert.
Quellen
- RFC 8259 (englisch): The JavaScript Object Notation (JSON) Data Interchange Format
- RFC 6901 (englisch): JavaScript Object Notation (JSON) Pointer
- RFC 6902 (englisch): JavaScript Object Notation (JSON) Patch
Zahlen und Text zuletzt geprüft: Dienstag, 10. November 2026.