Leitfaden für JSON-Standards: RFC 6901, 6902 und 7396
JSON ist zum De-facto-Standard für den Datenaustausch im Web geworden. Da APIs jedoch immer komplexer werden, reichen einfache JSON-Objekte oft nicht mehr aus. Entwickler benötigen standardisierte Wege, um auf bestimmte Teile eines JSON-Dokuments zu verweisen und Änderungen an diesen Dokumenten zu beschreiben. Hier kommen RFC 6901 (JSON Pointer), RFC 6902 (JSON Patch) und RFC 7396 (JSON Merge Patch) ins Spiel.
Was sind JSON Pointer und Patch?
- RFC 6901 (JSON Pointer): Definiert eine String-Syntax zur Identifizierung eines bestimmten Werts innerhalb eines JSON-Dokuments. Es ist wie eine „Adresse“ für ein Datenstück.
- RFC 6902 (JSON Patch): Definiert eine JSON-Dokumentstruktur zum Ausdrücken einer Folge von Operationen, die auf ein JSON-Dokument angewendet werden sollen. Es ist wie ein „Diff“ oder ein „Transaktionsprotokoll“.
- RFC 7396 (JSON Merge Patch): Bietet eine einfachere Möglichkeit, Änderungen zu beschreiben, indem ein „Patch“-Dokument gesendet wird, das wie das Zieldokument aussieht, aber nur die geänderten Felder enthält.
1. RFC 6901: JSON Pointer
JSON Pointer verwendet eine durch Schrägstriche (/) getrennte Syntax, um durch die Hierarchie eines JSON-Objekts zu navigieren.
Syntaxregeln:
/stellt die Wurzel dar./foozeigt auf den Wert des Schlüssels „foo“./foo/0zeigt auf das erste Element des Arrays „foo“.~1wird verwendet, um ein literales/darzustellen.~0wird verwendet, um ein literales~darzustellen.
Beispiel:
{
"biscuits": [
{ "name": "Digestive" },
{ "name": "Choco" }
]
}
Der Pointer /biscuits/1/name würde zu "Choco" aufgelöst werden.
2. RFC 6902: JSON Patch
JSON Patch ist ein Array von Operations-Objekten. Jedes Objekt muss ein op-Feld haben.
Operationen:
- add: Fügt einen Wert am angegebenen Pfad hinzu.
- remove: Entfernt den Wert am Pfad.
- replace: Ersetzt den Wert am Pfad.
- move: Verschiebt einen Wert von einem Pfad zu einem anderen.
- copy: Kopiert einen Wert von einem Pfad zu einem anderen.
- test: Prüft, ob ein Wert an einem Pfad wie erwartet ist.
Beispiel-Patch:
[
{ "op": "replace", "path": "/biscuits/0/name", "value": "Oatmeal" },
{ "op": "add", "path": "/biscuits/-", "value": { "name": "Ginger" } }
]
Das - in /biscuits/- bedeutet „das Ende des Arrays“.
3. RFC 7396: JSON Merge Patch
JSON Merge Patch ist viel einfacher als RFC 6902. Sie senden einfach ein JSON-Objekt, das den gewünschten Endzustand der Felder darstellt, die Sie ändern möchten.
Regeln:
- Wenn der Patch ein Feld mit einem Nicht-Null-Wert enthält, wird dieses Feld aktualisiert oder hinzugefügt.
- Wenn der Patch ein Feld mit einem
null-Wert enthält, wird dieses Feld aus dem Ziel entfernt. - Es ist nicht für das Patchen von Arrays geeignet (es ersetzt das gesamte Array).
Beispiel:
Ziel:
{ "a": "b", "c": "d" }
Patch:
{ "a": "z", "c": null, "e": "f" }
Ergebnis:
{ "a": "z", "e": "f" }
Vergleich: Patch vs. Merge Patch
| Merkmal | RFC 6902 (Patch) | RFC 7396 (Merge Patch) |
|---|---|---|
| Komplexität | Hoch (Array von Operationen) | Niedrig (Objektbasiert) |
| Effizienz | Sehr hoch (Chirurgisch) | Moderat (Feldebene) |
| Array-Unterstützung | Volle Unterstützung | Schlecht (ersetzt das gesamte Array) |
| Atomare Operationen | Ja (test-Operation) | Nein |
| Bestens geeignet für | Komplexe Zustandsänderungen | Einfache Eigenschafts-Updates |
Häufig gestellte Fragen FAQ
F: Welches sollte ich für meine API verwenden? A: Verwenden Sie JSON Merge Patch (7396) für einfache Ressourcen-Updates, bei denen Ihnen eine präzise Array-Manipulation nicht wichtig ist. Verwenden Sie JSON Patch (6902) für komplexe Ressourcen, hohe Performance-Anforderungen oder wenn Sie atomare „Test-and-Set“-Operationen benötigen.
F: Kann ich JSON Pointer in meiner URL verwenden?
A: Ja, es ist üblich, JSON Pointer in URI-Fragmenten zu verwenden (z. B. example.com/schema.json#/definitions/user).
F: Wie gehe ich mit Sonderzeichen in Schlüsseln um?
A: Verwenden Sie ~1 für / und ~0 für ~. Zum Beispiel wird ein Schlüssel namens a/b als /a~1b referenziert.
Verwandte Tools
- JSON Formatierer & Validator – Verwenden Sie dies, um Ihre Patch- oder Merge-Patch-Dokumente zu validieren.
- JSON zu CSV Konverter – Flachen Sie Ihre JSON-Daten für die Analyse ab.