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.

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.