JSON Toolkit

JSONPath oder JSON Pointer

Fazit: JSON Pointer ist eine eindeutige Adresse, die man als Schlüssel speichern kann; JSONPath ist eine Abfragesprache. Die falsche Wahl bricht Konfigurationsupdates oder erfindet ein kaputtes JSONPath neu.

Fortgeschritten~4 Min. LesezeitVeröffentlicht 2026-10-30Aktualisiert 2026-10-30
Wo JSONPath endet und JSON Pointer beginnt

Kurz gesagt: Verwenden Sie JSON Pointer, wenn Sie die Adresse eines Knotens lesen, schreiben oder speichern müssen (etwa /server/cors/0), und JSONPath, wenn Sie eine Menge von Knoten nach Bedingung auswählen müssen; jeder persistierte Pfad sollte ein Pointer sein, nie ein Ausdruck.

Fragen Sie, ob Sie einen Knoten oder eine Menge davon brauchen.

In einer Tabelle

JSON Pointer JSONPath
Natur Eindeutige Adresse Abfrageausdruck
Syntax /a/b/0 $.a.b[0], $..price
Ergebnis Genau ein Knoten oder keiner Null oder mehr Knoten
Als Schlüssel speicherbar Ja, der String ist die Identität Nein, kann viele Treffer haben
Standard RFC 6901 RFC 9535 (2024 fertiggestellt)

JSON Pointer

/server/host        -> "127.0.0.1"
/server/cors/0      -> "https://a.com"
/                   -> the whole document

Schlüssel mit / oder ~ werden escaped: ~0 für ~, ~1 für /. Der Wert ist die Bestimmtheit: Die Adresse ist ein String, sie passt also in eine Datenbankspalte, eine Logzeile oder einen Konfigurationsschlüssel. JSON Patch (RFC 6902) adressiert jede Operation auf diese Weise.

JSONPath

$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]

Näher an SQL WHERE. Derselbe Ausdruck liefert je nach Daten null, einen oder hundert Knoten.

Zwei Fehlermodi

JSONPath als Konfigurationsschlüssel verwenden. Speichern Sie $.server.port, und eines Tages wird die Struktur ein Array; der Ausdruck trifft jetzt mehrere Ports, und die Update-Logik hat keine Möglichkeit zu wählen.

Pointer zur Auswahl verwenden. „Finde jeden Knoten, dessen Preis unter 10 liegt“ ist mit einem Pointer unmöglich. Die Schleife selbst zu schreiben heißt, ein partielles JSONPath zu bauen.

Wie reale Systeme die Arbeit aufteilen

  • Konfiguration lesen, Feld-Updates, Patches: Pointer, fest und auditierbar
  • Datenexploration, Massenextraktion, Berichte: JSONPath, Ausdruckskraft zuerst
  • Alles, was persistiert wird: nur Pointer, nie ein Ausdruck

FAQ

Wie soll ich zwischen JSON Pointer und JSONPath wählen?

Fragen Sie, ob Sie einen Knoten oder eine Menge brauchen. Verwenden Sie JSON Pointer, um einen bestimmten Knoten zu lesen oder zu schreiben und diese Adresse als Schlüssel zu speichern, weil der Pointer eindeutig ist, etwa /server/cors/0. Verwenden Sie JSONPath, um Knoten nach Bedingung auszuwählen, etwa $.store.book[?(@.price < 10)].

Warum kann ein JSONPath-Ausdruck nicht als Konfigurationsschlüssel dienen?

Weil der Ausdruck mehrere Knoten treffen kann. Speichern Sie $.server.port, und eines Tages wird die Struktur ein Array; der Ausdruck trifft dann mehrere Ports, und die Update-Logik kann nicht entscheiden, welchen sie ändern soll. Alles Persistierte oder Auditierte braucht einen Pointer.

Kann JSON Pointer Knoten nach Bedingung filtern?

Nein. Ein Pointer geht nur einen festen Pfad entlang und kann nicht wissen, welche Knoten existieren, jeden Knoten mit Preis unter 10 auszuwählen ist also unmöglich. Diese Schleife selbst zu schreiben heißt, ein partielles JSONPath zu bauen.

Weiterführende Literatur