Skip to main content
CheckTown
Strumenti dev

JSONPath: linguaggio di query per estrarre dati JSON

Pubblicato 7 min di lettura
In questo articolo

Cos'è JSONPath?

JSONPath è un linguaggio di query per estrarre dati da documenti JSON. Proprio come XPath naviga i documenti XML, JSONPath naviga le strutture JSON usando una sintassi di espressioni concisa. È stato formalizzato in RFC 9535 (febbraio 2024) dopo anni di specifiche informali.

Le espressioni JSONPath iniziano con $ (l'elemento radice) e usano la notazione a punto o la notazione a parentesi per attraversare il documento. Il linguaggio supporta i caratteri jolly, la discesa ricorsiva, il taglio degli array e le espressioni di filtro — rendendo possibile estrarre valori profondamente annidati con una singola espressione.

Sintassi JSONPath

JSONPath fornisce diversi operatori per navigare e filtrare le strutture JSON.

  • Radice ($) — ogni espressione JSONPath inizia con $ che rappresenta l'oggetto o l'array radice del documento JSON
  • Notazione a punto ($.store.book) — accede alle proprietà figlio per nome, simile all'accesso agli oggetti JavaScript. I punti separano ogni livello di annidamento.
  • Notazione a parentesi ($['store']['book']) — sintassi alternativa che usa nomi di proprietà tra virgolette nelle parentesi. Obbligatoria quando i nomi delle proprietà contengono caratteri speciali o spazi.
  • Jolly (*) — corrisponde a tutti gli elementi al livello corrente. $.store.* restituisce tutti i figli diretti di store; $[*] restituisce tutti gli elementi di un array radice.
  • Discesa ricorsiva (..) — cerca tutti i discendenti a qualsiasi profondità. $..price trova ogni campo 'price' ovunque nel documento, indipendentemente dal livello di annidamento.
  • Sezioni di array ([start:end:step]) — selezionano un intervallo di elementi dell'array. $[0:3] restituisce i primi tre elementi; $[-2:] restituisce gli ultimi due; $[::2] restituisce ogni secondo elemento.

Esempi di espressioni JSONPath

Ecco esempi pratici che mostrano come le espressioni JSONPath estraggono dati da strutture JSON reali.

  • Estrazione di valori annidati — $.users[0].name recupera il nome del primo utente. $.config.database.host ottiene un valore di configurazione profondamente annidato.
  • Filtraggio di array — $.users[?(@.age > 18)] restituisce tutti gli utenti con più di 18 anni. $.products[?(@.price < 50)] trova prodotti convenienti. I filtri usano @ per fare riferimento all'elemento corrente.
  • Query multilivello — $..author restituisce ogni campo author a qualsiasi profondità. $.store.book[*].title restituisce tutti i titoli dei libri. $.orders[*].items[*].sku estrae gli SKU da tutti gli ordini e articoli.

Queste espressioni possono essere combinate per creare query potenti. Ad esempio, $.store.book[?(@.price < 10)].title restituisce i titoli di tutti i libri che costano meno di 10.

Prova gratuitamente — nessuna registrazione richiesta

Testa espressioni JSONPath →

Casi d'uso comuni

JSONPath viene utilizzato ovunque sia necessario interrogare o estrarre dati strutturati da documenti JSON.

  • Estrazione delle risposte API — estrai campi specifici da risposte API complesse senza scrivere codice di analisi personalizzato. Testa le espressioni su risposte di esempio prima di codificare.
  • Analisi della configurazione — estrai valori dai file di configurazione JSON nelle pipeline CI/CD, negli script di distribuzione e negli strumenti di infrastructure-as-code
  • Analisi dei log — interroga i log JSON strutturati per trovare eventi specifici, pattern di errore o metriche di prestazione in file di log di grandi dimensioni
  • Trasformazione dei dati — usa JSONPath nelle pipeline ETL per selezionare, filtrare e rimodellare i dati JSON durante le operazioni di importazione/esportazione

JSONPath vs JQ vs JMESPath

Diversi linguaggi di query si rivolgono ai documenti JSON. Ognuno ha diversi punti di forza e supporto ecosistemico.

  • JSONPath — sintassi di query standard (RFC 9535), ampiamente supportata nelle librerie di programmazione (Java, Python, JavaScript, PHP). Il migliore per estrazione e filtraggio semplici. Nessuna trasformazione integrata.
  • JQ — processore JSON da riga di comando con un potente linguaggio funzionale. Supporta trasformazione, computazione e formattazione dell'output. Il migliore per lo scripting di shell e l'elaborazione dei dati da riga di comando.
  • JMESPath — linguaggio di query utilizzato da AWS CLI e Boto3. Sintassi più rigorosa di JSONPath con funzioni integrate. Il migliore per l'integrazione con l'ecosistema AWS e le query programmatiche.

Domande frequenti

JSONPath usa l'indicizzazione degli array con base zero o con base uno?

JSONPath usa l'indicizzazione degli array con base zero, coerente con la maggior parte dei linguaggi di programmazione. $[0] restituisce il primo elemento, $[1] restituisce il secondo e così via. Gli indici negativi contano dalla fine: $[-1] restituisce l'ultimo elemento, $[-2] restituisce il penultimo.

Come funzionano le espressioni di filtro in JSONPath?

Le espressioni di filtro usano la sintassi [?(expression)] dove @ fa riferimento all'elemento corrente in fase di valutazione. Puoi usare operatori di confronto (==, !=, <, >, <=, >=), operatori logici (&& e ||) e accesso alle proprietà (ad es., @.name). Esempio: $[?(@.status == 'active')] restituisce gli elementi dove status è uguale a 'active'.

Tutte le implementazioni JSONPath sono compatibili?

Non del tutto. Prima di RFC 9535 (2024), JSONPath non aveva uno standard formale e le implementazioni variavano. Le differenze comuni includono la sintassi delle espressioni di filtro, il comportamento della discesa ricorsiva e la gestione delle proprietà mancanti. RFC 9535 mira a standardizzare il comportamento, ma le librerie più vecchie potrebbero ancora seguire convenzioni diverse. Testa sempre le espressioni con la tua implementazione specifica.

Strumenti correlati