JSON-Patch-Generator
Vergleichen Sie zwei JSON-Dokumente und erhalten Sie den RFC-6902-Patch, der das erste in das zweite überführt. Alles läuft in Ihrem Browser.
Was dieses Werkzeug tut
Es vergleicht zwei JSON-Dokumente und schreibt die Liste der Operationen, die das erste in das zweite überführt, im Format von RFC 6902. Statt ein ganzes Dokument zu senden, um zu sagen, dass sich ein Feld geändert hat, senden Sie die Änderung selbst.
Wann man es einsetzt
Für den Rumpf einer PATCH-Anfrage, um festzuhalten, was sich zwischen zwei Versionen einer Konfigurationsdatei geändert hat, oder für einen Revisionsverlauf, der weit kleiner ausfällt als jede vollständige Kopie. Es ist außerdem ein schneller Weg herauszufinden, was sich zwischen zwei scheinbar gleichen Dokumenten wirklich unterscheidet.
Die Operationen, die erzeugt werden
| Operation | Was sie bedeutet |
|---|---|
| add | Fügt einen Wert dort ein, wo keiner war, oder fügt in ein Array ein. |
| remove | Löscht den Wert an dieser Stelle. |
| replace | Überschreibt den Wert an einer Stelle, die bereits existiert. |
| move | Verschiebt einen Wert von einer Stelle an eine andere. |
| copy | Kopiert einen Wert an eine andere Stelle. |
| test | Prüft einen Wert und bricht den gesamten Patch ab, wenn er nicht stimmt. |
Dieses Werkzeug schreibt nur add, remove und replace. Diese drei können jede Änderung ausdrücken, und ein Patch, den man Zeile für Zeile lesen kann, ist mehr wert als ein kürzerer, über den man grübeln muss. Die anderen drei gehören zu RFC 6902, und jeder konforme Server nimmt sie an.
Wie die Pfade funktionieren
Jeder Pfad ist ein JSON Pointer (RFC 6901): eine durch Schrägstriche getrennte Route ab der Wurzel des Dokuments, wobei „/address/zipCode“ das Feld zipCode innerhalb von address meint. Array-Positionen sind Zahlen, „/skills/0“ ist also das erste Element, und ein Bindestrich steht für das Ende des Arrays: „/skills/-“ hängt an. Da der Schrägstrich das Trennzeichen ist, wird ein Schlüssel, der einen enthält, als ~1 geschrieben und eine echte Tilde als ~0.
Hinweise zum Ergebnis
Der Vergleich ist wörtlich: Werte werden Position für Position verglichen, ein Element am Anfang eines Arrays einzufügen erzeugt daher ein replace auf allen folgenden Elementen statt einer einzigen Einfügung. Bei Arrays von Objekten mit stabilen Kennungen fällt ein aus den Kennungen erzeugter Patch immer kleiner aus als einer aus den Positionen.
So erzeugen Sie einen JSON Patch
Fügen Sie zwei JSON-Dokumente ein und erzeugen Sie den Patch.
- Das ursprüngliche JSON links einfügen.
- Das geänderte JSON rechts einfügen.
- Auf Erzeugen klicken und den Patch kopieren.
Häufige Fragen
Lädt dieses Werkzeug meine Daten irgendwohin hoch?
Nein. Beide Dokumente bleiben in Ihrem Browser, und der Patch entsteht auf Ihrem eigenen Rechner.
Ist die Ausgabe RFC-6902-konform?
Ja. Jede Operation ist ein Objekt mit op, path und — bei add und replace — value, und die Pfade sind JSON Pointer, wie RFC 6901 sie definiert.
Enthält sie move- und copy-Operationen?
Nein. Erzeugt werden add, remove und replace, die für jede Änderung genügen und weit leichter zu lesen sind. Ein move ist schlicht ein remove gefolgt von einem add.
Wie wende ich den Patch an?
Senden Sie ihn an eine API, die application/json-patch+json annimmt, oder nutzen Sie eine Bibliothek: jsonpatch in Python, json-patch in JavaScript, JsonPatchDocument in .NET, json-patch in Java und so weiter.
Worin unterscheidet es sich von JSON Merge Patch?
JSON Merge Patch (RFC 7386) sieht aus wie das Dokument selbst, wobei null „löschen“ bedeutet. Das macht es leicht lesbar, aber unfähig, ein echtes null zu speichern oder ein einzelnes Element eines Arrays zu ändern. JSON Patch ist ausführlicher und kann alles ausdrücken.
Wikipedia — JSON Patch
Wikipedia — JSON
Wikipedia — Patch (computing)
Wikipedia — Diff
Wikipedia — REST