JSONPath, nebo JSON Pointer
Shrnutí: JSON Pointer je jedinečná adresa, kterou lze uložit jako klíč; JSONPath je dotazovací jazyk. Použití špatného rozbíjí aktualizace konfigurace, nebo znovu vynalézá rozbitý JSONPath.

Stručně: JSON Pointer použijte, když potřebujete číst, zapsat nebo uložit adresu jednoho uzelu (například /server/cors/0), a JSONPath, když potřebujete vybrat množinu uzlů podle podmínky; každá uložená cesta má být Pointer, nikdy výraz.
Ptejte se, zda potřebujete jeden uzel, nebo množinu.
V jedné tabulce
| JSON Pointer | JSONPath | |
|---|---|---|
| Povaha | Jedinečná adresa | Dotazovací výraz |
| Syntaxe | /a/b/0 |
$.a.b[0], $..price |
| Výsledek | Přesně jeden uzel, nebo žádný | Nula nebo více uzlů |
| Uložitelný jako klíč | Ano, řetězec je identita | Ne, může odpovídat mnoha |
| Standard | RFC 6901 | RFC 9535 (dokončen 2024) |
JSON Pointer
/server/host -> "127.0.0.1"
/server/cors/0 -> "https://a.com"
/ -> celý dokument
Klíče obsahující / nebo ~ se escapují: ~0 pro ~, ~1 pro /. Hodnotou je determinismus: adresa je řetězec, takže se vejde do databázového sloupce, řádku logu nebo konfiguračního klíče. JSON Patch (RFC 6902) adresuje každou operaci právě takto.
JSONPath
$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]
Blíže k SQL WHERE. Stejný výraz vrací nula, jeden nebo sto uzlů podle dat.
Dva režimy selhání
Použití JSONPath jako konfiguračního klíče. Uložte $.server.port a jednoho dne se struktura stane polem; výraz teď odpovídá několika portům a logika aktualizace nemá jak vybrat.
Použití Pointer pro výběr. „Najdi každý uzel, jehož cena je pod 10“ je s pointerem nemožné. Napsat smyčku sám znamená postavit částečný JSONPath.
Jak si skutečné systémy dělí práci
- Čtení konfigurace, aktualizace polí, patche: Pointer, pevný a auditovatelný
- Průzkum dat, hromadná extrakce, reporty: JSONPath, vyjádřivost na prvním místě
- Cokoli uloženého: jen Pointer, nikdy výraz
Časté dotazy
Jak volit mezi JSON Pointer a JSONPath?
Ptejte se, zda potřebujete jeden uzel, nebo množinu. JSON Pointer použijte ke čtení nebo zápisu jednoho konkrétního uzelu a k uložení této adresy jako klíče, protože pointer je jedinečný, například /server/cors/0. JSONPath použijte k výběru uzlů podle podmínky, například $.store.book[?(@.price < 10)].
Proč nelze výraz JSONPath použít jako konfigurační klíč?
Protože výraz může odpovídat několika uzlům. Uložte $.server.port a jednoho dne se struktura stane polem; výraz pak odpovídá několika portům a logika aktualizace nemůže rozhodnout, který změnit. Cokoli uloženého nebo auditovaného potřebuje Pointer.
Může JSON Pointer filtrovat uzly podle podmínky?
Ne. Pointer jen prochází pevnou cestu a nemá jak zjistit, které uzly existují, takže vybrat každý uzel s cenou pod 10 je nemožné. Napsat tu smyčku sám znamená postavit částečný JSONPath.