JSON Toolkit

JSONPath o JSON Pointer

In sintesi: JSON Pointer è un indirizzo univoco che puoi memorizzare come chiave; JSONPath è un linguaggio di interrogazione. Usare quello sbagliato rompe gli aggiornamenti di configurazione o reinventa un JSONPath rotto.

Intermedio~4 min di letturaPubblicato il 2026-10-30Aggiornato il 2026-10-30
Dove finisce JSONPath e dove inizia JSON Pointer

In sintesi: usa JSON Pointer quando devi leggere, scrivere o memorizzare l'indirizzo di un nodo (per esempio /server/cors/0), e JSONPath quando devi selezionare un insieme di nodi per condizione; qualsiasi percorso persistito dovrebbe essere un Pointer, mai un'espressione.

Chiediti se ti serve un nodo o un insieme di nodi.

In una tabella

JSON Pointer JSONPath
Natura Indirizzo univoco Espressione di interrogazione
Sintassi /a/b/0 $.a.b[0], $..price
Risultato Esattamente un nodo, oppure nessuno Zero o più nodi
Memorizzabile come chiave Sì, la stringa è l'identità No, può corrispondere a molti
Standard RFC 6901 RFC 9535 (finalizzato nel 2024)

JSON Pointer

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

Le chiavi che contengono / o ~ vengono sottoposte a escape: ~0 per ~, ~1 per /. Il valore è il determinismo: l'indirizzo è una stringa, quindi sta in una colonna di database, in una riga di log o in una chiave di configurazione. JSON Patch (RFC 6902) indirizza ogni operazione in questo modo.

JSONPath

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

Più vicino al WHERE di SQL. La stessa espressione restituisce zero, uno o cento nodi a seconda dei dati.

Due modalità di errore

Usare JSONPath come chiave di configurazione. Memorizzi $.server.port e un giorno la struttura diventa un array; l'espressione ora corrisponde a diverse porte e la logica di aggiornamento non ha modo di scegliere.

Usare Pointer per la selezione. "Trova ogni nodo con prezzo inferiore a 10" è impossibile con un pointer. Scrivere tu stesso il ciclo significa costruire un JSONPath parziale.

Come i sistemi reali dividono il lavoro

  • Letture di configurazione, aggiornamenti di campi, patch: Pointer, fisso e verificabile
  • Esplorazione dei dati, estrazione in massa, reporting: JSONPath, espressività al primo posto
  • Qualsiasi cosa persistita: solo Pointer, mai un'espressione

FAQ

Come devo scegliere tra JSON Pointer e JSONPath?

Chiediti se ti serve un nodo o un insieme. Usa JSON Pointer per leggere o scrivere un nodo specifico e per memorizzare quell'indirizzo come chiave, perché il pointer è univoco, per esempio /server/cors/0. Usa JSONPath per selezionare nodi per condizione, per esempio $.store.book[?(@.price < 10)].

Perché un'espressione JSONPath non può essere usata come chiave di configurazione?

Perché l'espressione può corrispondere a diversi nodi. Memorizzi $.server.port e un giorno la struttura diventa un array; l'espressione allora corrisponde a più porte e la logica di aggiornamento non può decidere quale modificare. Qualsiasi cosa persistita o verificata necessita di un Pointer.

JSON Pointer può filtrare i nodi per condizione?

No. Un pointer percorre solo un percorso fisso e non ha modo di sapere quali nodi esistono, quindi selezionare ogni nodo con prezzo inferiore a 10 è impossibile. Scrivere tu stesso quel ciclo significa costruire un JSONPath parziale.

Ulteriori letture