JSON Toolkit

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.

Středně pokročilý~4 min čteníPublikováno 2026-10-30Aktualizováno 2026-10-30
Kde JSONPath končí a JSON Pointer začíná

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.

Další čtení