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.

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.