json rfc rfc6901 rfc6902 rfc7396 api-design standards

Leitfaden für JSON-Standards: RFC 6901 (Pointer), 6902 (Patch) und 7396 (Merge Patch)

Meistern Sie die Standards zur JSON-Manipulation. Erfahren Sie, wie RFC 6901, RFC 6902 und RFC 7396 standardisierte Wege zur Adressierung und Änderung von JSON-Daten bieten.

2026-04-11

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.
  • /foo zeigt auf den Wert des Schlüssels „foo“.
  • /foo/0 zeigt auf das erste Element des Arrays „foo“.
  • ~1 wird verwendet, um ein literales / darzustellen.
  • ~0 wird 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