Interroghi JSON con espressioni in stile JSONPath
Estragga valori da un documento di dati con un percorso breve: $.store.books[*].title restituisce North e South, un titolo per libro e nell’ordine in cui compaiono. Un percorso senza risultati dà un elenco vuoto, non un errore. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Percorso
- $.store.books[*].title
- Corrispondenze
- North, South
La sintassi supportata comprende proprietà dirette, proprietà tra virgolette, indici di array e wildcard, mentre rifiuta intenzionalmente filtri, discesa ricorsiva, intervalli, unioni ed espressioni eseguibili. Questo contratto ristretto rende i risultati prevedibili per debug, test, ispezione dei dati e automazioni leggere.
Costruisca un percorso dall’inizio del documento
Ogni espressione inizia con <code>$</code>, che rappresenta l’intero documento analizzato. Aggiunga un punto seguito da un nome di proprietà semplice, come <code>$.customer.name</code>, per scendere negli oggetti. Nella notazione puntata, i nomi devono iniziare con una lettera o un trattino basso e possono poi contenere lettere, cifre o trattini bassi.
Quando una chiave contiene uno spazio, un trattino, un punto o un altro carattere non conforme alla regola, usi un passaggio tra parentesi e virgolette, per esempio <code>$['display-name']</code> oppure <code>$["shipping address"]</code>. Sono ammesse virgolette singole e doppie; è possibile proteggere la virgoletta corrispondente o una barra inversa. I percorsi vengono valutati da sinistra a destra e una proprietà assente non produce valori per quel ramo.
La risposta contiene sempre un array <code>matches</code>, anche quando il percorso individua un solo scalare, così Lei può gestire risultati singoli, wildcard e risultati vuoti con la stessa struttura.
Selezioni elementi degli array ed espanda le wildcard
Inserisca un intero non negativo tra parentesi per selezionare una posizione dell’array, come <code>$.orders[0].id</code>. Gli indici partono da zero, quindi il primo elemento è zero e una posizione oltre la lunghezza non genera corrispondenze. Usi <code>[*]</code> per espandere tutti gli elementi, poi prosegua nel percorso per leggere un campo da ciascuno.
Per esempio, <code>$.store.books[*].title</code> restituisce il titolo di ogni oggetto libro che possiede tale proprietà. È supportata anche la forma puntata <code>.*</code>. Le wildcard possono essere combinate con successivi passaggi di proprietà o indice, mentre i rami senza corrispondenze vengono esclusi senza influenzare gli altri.
L’ordine finale segue quindi il documento di origine e la sequenza di attraversamento.
Riconosca la sintassi esclusa intenzionalmente
Questa capacità implementa un piccolo linguaggio in stile JSONPath, non tutti i dialetti disponibili. Rifiuta la discesa ricorsiva come <code>$..name</code>, i filtri come <code>$[?( @.price < 10)]</code>, gli intervalli, le unioni, gli indici negativi, le espressioni di script e le funzioni.
La scelta è intenzionale: tali funzioni differiscono tra librerie e alcune consentono valutazioni inadatte a un parser deterministico. Al contrario, un percorso sintatticamente valido che non trova nulla non è un errore: restituisce un array <code>matches</code> vuoto. L’automazione può così distinguere istruzioni malformate da interrogazioni valide su dati facoltativi assenti.
Per un’integrazione affidabile, convalidi i percorsi durante lo sviluppo, rispetti il sottoinsieme documentato e stabilisca se un insieme vuoto sia accettabile nel Suo flusso.
Domande frequenti
Quali funzionalità JSONPath sono supportate?
Il sottoinsieme include il simbolo radice, proprietà puntate, proprietà tra parentesi e virgolette, indici non negativi e wildcard.
Che cosa accade se un percorso non trova corrispondenze?
La richiesta riesce e restituisce un array matches vuoto. Un dato assente è diverso da una sintassi di percorso non valida.
Posso usare filtri o discesa ricorsiva?
No. Filtri, discesa ricorsiva, intervalli, unioni, script, funzioni e indici negativi vengono rifiutati.
Come leggo una chiave con spazi o trattini?
Scriva il nome tra virgolette dentro parentesi quadre, per esempio $['display-name'] o $["shipping address"]. Il punto semplice vale solo per nomi che iniziano con una lettera o un trattino basso e proseguono con lettere, cifre o trattini bassi.
Le posizioni di un elenco partono da 0 o da 1?
Da 0: $.orders[0].id legge il primo ordine. Una posizione oltre la fine dell’elenco non produce risultati e nemmeno un errore, e le posizioni negative non sono accettate.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev2/json-path-query \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}'const res = await fetch("https://api.kit.forhosting.com/dev2/json-path-query", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/json-path-query",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/json-path-query", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"json":"{\\"store\\":{\\"books\\":[{\\"title\\":\\"North\\",\\"price\\":12},{\\"title\\":\\"South\\",\\"price\\":18}]}}","path":"$.store.books[*].title"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/json-path-query", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.json_path_query",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Questo strumento di interrogazione in stile JSONPath estrae valori da un documento JSON senza richiedere che Lei scriva uno script, installi dipendenze o configuri la riga di comando. Incolli un JSON valido, inserisca un percorso che inizi con il simbolo radice e riceverà un elenco ordinato di corrispondenze.
Costruisca un percorso dalla radice JSON
L’espressione radice da sola è valida e restituisce l’intero valore JSON come unica corrispondenza.
Selezioni elementi degli array ed espanda le wildcard
Su un oggetto, una wildcard visita i valori nell’ordine standard delle proprietà JSON; su un array, visita gli elementi dal primo all’ultimo. I valori mantengono i tipi JSON nativi: stringhe, numeri, oggetti, array, booleani e valori nulli vengono restituiti senza conversione.
Riconosca la sintassi esclusa intenzionalmente
Le espressioni non supportate restituiscono un errore <code>invalid_input</code> con un messaggio che identifica il problema di sintassi; non vengono mai trattate come percorsi parzialmente validi. Un JSON non valido viene rifiutato separatamente prima dell’attraversamento. Il prezzo API parte da $0.002 per richiesta e il browser può usare la stessa logica deterministica.
Casi di integrazione
Ispezionare una risposta API
Estragga uno stato, un identificatore o un elenco di valori annidato in profondità durante il debug di una risposta.
Creare asserzioni di test stabili
Selezioni soltanto i campi necessari a un test di regressione anziché confrontare un intero documento variabile.
Preparare automazioni leggere
Prelevi valori da un JSON di configurazione, webhook o esportazione prima di passarli al successivo passaggio deterministico.
Domande tecniche
I valori trovati vengono convertiti in testo?
No. Mantengono i tipi JSON, inclusi numeri, booleani, valori nulli, oggetti e array.
Quanto costa una richiesta API?
Il prezzo API parte da $0.002 per richiesta. La capacità può anche essere eseguita gratuitamente nel browser.