Vai al contenuto
ToolsMinify logo
Tutti gli articoli

Interroger del JSON con JSONPath - Les expressions que vous tapez vraiment

$ e @, point vs crochets, jokers, descente recursive, slices e un filtre simple - piu RFC 9535 vs l'ancien dialecte Goessner e cinq esempi a incollare su un stesso payload.

Aggiornato 23 settembre 20268 min di lettura

Usa Tester JSONPath - Gratis

Apri lo strumento live e applica ciò che hai imparato in questa guida.

Apri Tester JSONPath

JSONPath e un langage di requete per JSON comme XPath l'est per XML: vous pointez dei noeuds al lieu d'ecrire dei boucles imbriquees. La plupart del temps, seuls alcuni token suffisent - `$`, `@`, points, crochets, `*`, `..`, un slice e un filtre `[?()]` simple. Questa guida e questa liste courte, non un clone complet del RFC. Collez l'exemple ci-dessous in il Testeur JSONPath e essayez ogni expression in il browser - rien non e envoye.

Risposta rapida

Commencez ogni chemin par `$` (la racine del document). Utilisez `@` in un filtre per l'element courant. Preferez `$.store.book[*].title` al quotidien; utilisez `$['store']['book'][0]` quando la chiave a dei espaces o dei caracteres reserves. `$..author` trouve un champ a n'importe quelle profondeur. Les filtres ressemblent a `$.store.book[?(@.price < 10)]`. Traitez RFC 9535 comme il dialecte moderne e i vieux echantillons Goessner comme del folklore jusqu'a verification.

Un stesso payload d'exemple

Tous i esempi utilisent il document classique della librairie (la stesso forme que partagent beaucoup di tutoriels JSONPath). Gardez-le sotto i yeux pendant la lecture:

  • `store.book` - un array d'objets con `category`, `author`, `title`, `price` e parfois `isbn`.
  • `store.bicycle` - un oggetto imbrique con `color` e `price`.
  • Si tuo payload e arrive su una seule ligne, formatez-le prima con il Minificatore e formattatore JSON, puis interrogez.

$ e @

`$` e la racine della valore JSON que vous avez colle - l'objet o il array entier. Toute expression utile commence la. `@` n'a di sens que in un filtre: cela veut dire "l'element courant in cours di test." Hors filtre, `@` non e un curseur libre.

  • `$` - la racine del document.
  • `@.price` in `[?()]` - il champ `price` dell'element teste.
  • `$.store.book[?(@.isbn)]` - i livres qui ont la chiave `isbn` (existence).
  • Un chemin senza `$` e souvent refuse par i testeurs stricts - commencez sempre par `$`.

Point vs crochets

La notation point e un raccourci per i identifiants simples: `$.store.book`. La notation crochets e la forme explicite: `$['store']['book']`. Utilisez i crochets quando la chiave non e un identifiant plat (espaces, tirets, chiffres in tete) o quando vous voulez il style di chemin normalise RFC 9535 que beaucoup d'outils affichent in il array dei matches.

  • `$.store.bicycle.color` - correct per dei chiavi ordinaires.
  • `$['content-type']` - necessaire quando la chiave non e un identifiant style JS.
  • `$['store']['book'][0]['title']` - chemin singulier normalise verso un noeud (style RFC 9535 §2.7).
  • Les index sono sempre tra crochets: `$.store.book[0]`, non `$.store.book.0`.

* e ..

`*` e un joker per "chaque enfant a questo niveau." `..` e la descente recursive: on parcourt l'arbre e on collecte i matches a tutta profondeur. Les jokers restent peu profonds; la descente puo surprendre su di gros documents.

  • `$.store.book[*].title` - il titre di ogni livre (un niveau d'items del tableau).
  • `$.store.*` - a la fois `book` e `bicycle` sotto `store`.
  • `$..author` - ogni `author` n'importe o sotto la racine.
  • `$..price` - i prix dei livres e celui del bicycle insieme - resserrez il chemin si vous n'en vouliez qu'un.

Slices

Les slices di array utilisent `start:end:step` a la Python tra crochets. Les bornes omises veulent dire "depuis il debut" o "jusqu'a la fin." Les index negatifs comptent da la fin quando l'implementation i accepte.

  • `$.store.book[0:2]` - i deux premiers livres (index 0 e 1).
  • `$.store.book[-1:]` - il dernier livre, su i motori qui autorisent i index negatifs.
  • `$.store.book[::2]` - un livre su deux quando il step e supporte.
  • Les slices selectionnent dei items del tableau; enchainez un champ apres: `$.store.book[0:2].title`.

Un filtre simple

Les filtres vivent in `[?(...)]` e gardent i items o l'expression e vraie. `@` e l'element courant. Les comparaisons non coercionnent in general non i types comme il JavaScript lache - `1 == "1"` e souvent faux. Mantieni i filtres ennuyeux: egalite, inegalite, compare numerique, `&&`, `||`, `!` e existence.

  • `$.store.book[?(@.price < 10)]` - livres bon marche.
  • `$.store.book[?(@.price < 10 && @.category == 'fiction')].title` - filtrez, puis extrayez un champ.
  • `$.store.book[?(@.isbn)]` - items qui ont `isbn`.
  • Placez il filtre su il array que vous parcourez, non su una racine oggetto seule sauf si la racine e un tableau.

RFC 9535 vs l'ancien dialecte Goessner

L'article di Stefan Goessner in 2007 a popularise JSONPath e beaucoup di bibliotheques copient ancora ses exemples. RFC 9535 (2024) e il standard IETF: grammaire piu claire, chemins normalises e meno d'echappatoires "eval n'importe quoi". Les selecteurs script comme `[(@.length-1)]` e il JavaScript libre in i filtres appartiennent al Far West, non a un testeur browser sur.

  • RFC 9535 - operateurs standardises, chemins normalises comme `$['store']['book'][0]`, concu per dei implementations interoperables.
  • Echantillons dell'ere Goessner - ancora partout in i blogs; verifica avant di i mettre in production.
  • Sous-ensembles senza eval - questo qu'il faut per dei payloads d'API colles. Refusez i selecteurs script; n'executez mai il chemin comme del JavaScript.
  • Quand deux strumenti divergent, regardez quel dialecte ils revendiquent - non lequel "semble" juste.

Pas la spec complete

Cet articolo e un aide-memoire d'expressions del quotidien. Per il dettaglio normatif, lisez RFC 9535. Per dei essais prives su tuo JSON, utilisez il Testeur JSONPath.

Cinq esempi a coller

Sur l'echantillon librairie, essayez ceux-ci in l'ordre:

  • `$.store.book[*].title` - tutti i titoli in liste.
  • `$..author` - ogni auteur via descente recursive.
  • `$.store.book[0:2]` - i deux premiers oggetti livre.
  • `$.store.book[?(@.price < 10)]` - livres a prix inferieur a 10.
  • `$.store.book[?(@.price < 10)].title` - stesso filtre, titoli seulement.

Apres avoir extrait una liste plate d'enregistrements, vous voudrez peut-etre una vue tableur - passez un array JSON d'objets in il Convertitore JSON verso CSV. Per dei blobs d'API imbriques que vous explorez encore, restez in JSONPath jusqu'a questo que la forme soit claire.

Domande frequenti

Tout JSONPath commence-t-il par $?

Oui in pratique. `$` nomme la racine. Les strumenti stricts rejettent i chemins qui l'omettent.

Quand utilizzare @?

Uniquement in i filtres `[?()]`, comme element courant. Questo non e un substitut di `$` in debut di chemin.

Pourquoi zero match?

Un chemin valide puo non rien matcher. Causes frequentes: filtrer una racine oggetto al lieu d'un tableau, typo su una cle, o attendre la coercion di types JavaScript. Essayez `$..field` per confirmer que il champ existe, puis resserrez.

JSONPath est-il la stesso chose que JMESPath o jq?

Non. Idee voisine, syntaxe e bibliotheques differentes. Scegli un dialecte par codebase e mantieniti su quella.

Puis-je tester una risposta d'API privata in securite?

Oui si l'evaluateur tourne in il browser senza upload. Le Testeur JSONPath e fait per ca - collez, interrogez, copiez il JSON extrait o i chemins normalises.

Essayez su ToolsMinify

Tous i strumenti ci-dessous tournent in il browser - gratuits, senza compte, senza upload:

Provalo gratis

Ouvrez il Testeur JSONPath, chargez l'echantillon librairie e collez `$.store.book[?(@.price < 10)].title`. Vous devriez voir i titoli bon funziona - tutto su tuo appareil.

Usa Tester JSONPath - Gratis

Apri lo strumento live e applica ciò che hai imparato in questa guida.

Apri Tester JSONPath

Articoli correlati