ToolDeck

Tester JSONPath

Testa espressioni JSONPath su dati JSON e visualizza i risultati corrispondenti

Prova un esempio

Input JSON

Risultati

Esegue in locale · Sicuro per incollare segreti
I risultati appariranno qui…

Cos'è JSONPath?

JSONPath è un linguaggio di query per estrarre valori da documenti JSON. Originariamente proposto da Stefan Goessner nel 2007 come analogo di XPath per XML, JSONPath consente di scrivere espressioni come $.store.book[*].author per selezionare tutti i campi autore all'interno di un array di libri senza scrivere cicli o codice di attraversamento manuale. Il linguaggio è stato standardizzato nel febbraio 2024 come RFC 9535, pubblicato dall'IETF.

Un'espressione JSONPath inizia sempre con $ che rappresenta la radice del documento. Da lì si concatenano i selettori: la notazione a punto per le chiavi degli oggetti, la notazione a parentesi per gli indici degli array, i caratteri jolly per tutti i figli e l'operatore di discesa ricorsiva (..) per cercare in ogni livello di annidamento. Le espressioni filtro come [?(@.price < 10)] permettono di selezionare elementi in base a condizioni valutate sui loro valori.

JSONPath è utilizzato in strumenti di test API come Postman, piattaforme di osservabilità come Datadog e Splunk, motori di workflow come Apache NiFi, e librerie di programmazione in JavaScript, Python, Go, Java e C#. Testare le proprie espressioni su dati reali prima di incorporarle nel codice o nei file di configurazione previene i fallimenti silenziosi quando la struttura JSON non corrisponde alle aspettative.

Perché usare questo Tester JSONPath?

Scrivere espressioni JSONPath a mano è soggetto a errori. Un punto mancante, il tipo sbagliato di parentesi o una sintassi di filtro errata possono restituire risultati vuoti senza alcun messaggio di errore. Questo strumento fornisce un feedback visivo immediato su ciò che la tua espressione corrisponde.

Risultati Istantanei
Incolla il JSON, digita un'espressione e osserva i valori corrispondenti aggiornarsi in tempo reale. Non è necessario eseguire uno script o ricaricare la pagina per verificare la query.
🔒
Privacy Prima di Tutto
Tutta la valutazione avviene nel browser. I tuoi dati JSON non lasciano mai il tuo dispositivo, quindi puoi testare in sicurezza le espressioni sulle risposte API di produzione o sui file di configurazione contenenti credenziali.
📋
Copia i Risultati Direttamente
Copia l'output corrispondente come JSON con un solo clic. Incollalo nelle asserzioni dei test, nella documentazione o negli esempi di risposta API senza riformattazione.
🛠️
Nessuna Configurazione Richiesta
Nessun pacchetto npm da installare, nessun virtualenv Python da creare. Apri la pagina, incolla i tuoi dati e inizia a interrogare. Funziona su qualsiasi dispositivo con un browser.

Casi d'Uso di JSONPath

Sviluppo Frontend
Estrai i valori annidati esatti di cui hai bisogno dalle risposte API prima di collegarli allo state di React o alle proprietà computed di Vue. Testa prima le espressioni path sul payload API reale.
Test di API Backend
Postman e REST-assured usano JSONPath per asserire i body delle risposte. Costruisci e verifica le tue espressioni di asserzione qui prima di copiarle negli script di test, riducendo i cicli di debug.
Configurazione DevOps
Le definizioni di risorse personalizzate di Kubernetes, AWS Step Functions e le sorgenti dati di Terraform accettano espressioni JSONPath per estrarre valori dagli output JSON. Valida il tuo path prima del deployment.
Automazione dei Test QA
Scrivi asserzioni basate su JSONPath per i test contrattuali e di integrazione. Verifica che le tue espressioni corrispondano correttamente ai valori attesi quando la struttura JSON ha campi opzionali o nullable.
Estrazione in Pipeline di Dati
Apache NiFi, Logstash e script ETL personalizzati usano JSONPath per estrarre campi da dati di log semistrutturati e stream di eventi. Testa le espressioni su payload di esempio prima del deployment della pipeline.
Apprendimento e Sperimentazione
Studenti e sviluppatori alle prime armi con JSONPath possono provare diverse espressioni su JSON di esempio per capire come funzionano i caratteri jolly, la discesa ricorsiva e i filtri senza un ambiente locale.

Riferimento della Sintassi JSONPath

RFC 9535 definisce la sintassi standard di JSONPath. La tabella seguente copre gli operatori che userai nella maggior parte delle query. Tutte le espressioni iniziano con $ (il nodo radice) e concatenano uno o più selettori per navigare nella struttura del documento.

OperatoreDescrizioneEsempio
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath vs jq vs XPath

JSONPath, jq e XPath risolvono lo stesso problema (interrogare dati strutturati) per formati e casi d'uso diversi. JSONPath è orientato al JSON ed è disponibile come libreria nella maggior parte dei linguaggi. jq è uno strumento CLI autonomo con un proprio linguaggio di filtri Turing-completo. XPath opera su XML e fa parte dello stack di specifiche W3C.

CaratteristicaJSONPathjqXPath
Formato datiJSONJSONXML
Accesso al primo elemento$.store.book[0].store.book[0]/store/book[1]
Ricerca ricorsiva$..price.. | .price?//price
Espressione filtro[?(@.price<10)]select(.price < 10)[price<10]
SpecificaRFC 9535stedolan.github.ioW3C XPath 3.1

Esempi di Codice

Come valutare espressioni JSONPath nei linguaggi e strumenti più diffusi. Ogni esempio usa la stessa struttura JSON di una libreria per il confronto.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Domande Frequenti

Qual è la differenza tra JSONPath e jq?
JSONPath è un linguaggio di query progettato per essere incorporato nelle applicazioni come libreria. Restituisce i valori corrispondenti da un documento JSON usando espressioni path. jq è uno strumento da riga di comando autonomo con un linguaggio di programmazione completo per trasformare JSON, inclusi condizionali, funzioni e interpolazione di stringhe. Usa JSONPath quando hai bisogno di una query incorporata nel codice o in uno strumento come Postman. Usa jq per la trasformazione di dati ad-hoc da riga di comando.
JSONPath è uno standard ufficiale?
Sì. L'IETF ha pubblicato RFC 9535 ("JSONPath: Query Expressions for JSON") nel febbraio 2024. Prima di allora, JSONPath esisteva solo come specifica informale di Stefan Goessner del 2007, che portava a inconsistenze tra le implementazioni. RFC 9535 definisce la sintassi, la semantica e un formato di normalizzazione per l'interoperabilità.
Come funziona la discesa ricorsiva (..) in JSONPath?
L'operatore di discesa ricorsiva (..) cerca in ogni livello del documento JSON la chiave che lo segue. Ad esempio, $..price restituisce tutti i valori associati alla chiave "price" indipendentemente da quanto siano annidati in profondità. È equivalente a un attraversamento in profondità che raccoglie i nodi corrispondenti. Tieni presente che su documenti di grandi dimensioni, la discesa ricorsiva può restituire molti risultati ed essere più lenta di un path diretto.
JSONPath può modificare i dati JSON?
No. JSONPath è un linguaggio di query in sola lettura. Seleziona e restituisce valori ma non può inserire, aggiornare o eliminare nodi. Per modificare il JSON basandosi su un'espressione JSONPath, devi usare le funzioni di manipolazione JSON del tuo linguaggio di programmazione dopo la query. Alcune librerie come jsonpath-ng in Python forniscono un metodo set() sugli oggetti di corrispondenza, ma si tratta di un'estensione della libreria, non parte della specifica JSONPath.
Cosa significa il simbolo @ nelle espressioni filtro JSONPath?
Il simbolo @ fa riferimento al nodo corrente valutato in un'espressione filtro. In $.store.book[?(@.price < 10)], il filtro itera su ogni elemento dell'array book, e @ rappresenta ogni oggetto book a turno. @.price accede al campo price del book corrente. Senza @, il filtro non saprebbe quali proprietà del nodo controllare.
Come gestisco le chiavi con caratteri speciali o spazi in JSONPath?
Usa la notazione a parentesi con le virgolette: $['store']['book title']. La notazione a parentesi funziona per qualsiasi chiave, incluse quelle con punti, spazi o caratteri Unicode. La notazione a punto ($.store.key) funziona solo per le chiavi che sono identificatori validi (lettere, cifre, underscore). RFC 9535 richiede che le implementazioni supportino sia la notazione a parentesi con virgolette singole che doppie.
Perché la mia espressione JSONPath restituisce risultati vuoti?
Le cause più comuni sono: un errore di battitura nel nome di una chiave (JSONPath è case-sensitive), l'uso della notazione a punto per una chiave che contiene caratteri speciali, la mancanza del simbolo radice $ all'inizio, o il presupporre che un valore sia un array quando è un singolo oggetto. Incolla il tuo JSON in uno strumento tester e prova prima sub-espressioni più semplici (come $.store) per verificare che ogni segmento del path si risolva correttamente prima di aggiungere altri selettori.