Aller au contenu
ToolsMinify logo
Tous les articles

Interroger du JSON avec JSONPath - Les expressions que vous tapez vraiment

$ et @, point vs crochets, jokers, descente recursive, slices et un filtre simple - plus RFC 9535 vs l'ancien dialecte Goessner et cinq exemples a coller sur un meme payload.

Mis à jour 23 septembre 20268 min de lecture

Utilisez Testeur JSONPath - gratuit

Ouvrez l'outil en ligne et appliquez ce que vous avez appris dans ce guide.

Ouvrir Testeur JSONPath

JSONPath est un langage de requete pour JSON comme XPath l'est pour XML: vous pointez des noeuds au lieu d'ecrire des boucles imbriquees. La plupart du temps, seuls quelques jetons suffisent - `$`, `@`, points, crochets, `*`, `..`, un slice et un filtre `[?()]` simple. Ce guide est cette liste courte, pas un clone complet du RFC. Collez l'exemple ci-dessous dans le Testeur JSONPath et essayez chaque expression dans le navigateur - rien n'est envoye.

Reponse rapide

Commencez chaque chemin par `$` (la racine du document). Utilisez `@` dans un filtre pour l'element courant. Preferez `$.store.book[*].title` au quotidien; utilisez `$['store']['book'][0]` quand la cle a des espaces ou des caracteres reserves. `$..author` trouve un champ a n'importe quelle profondeur. Les filtres ressemblent a `$.store.book[?(@.price < 10)]`. Traitez RFC 9535 comme le dialecte moderne et les vieux echantillons Goessner comme du folklore jusqu'a verification.

Un meme payload d'exemple

Tous les exemples utilisent le document classique de la librairie (la meme forme que partagent beaucoup de tutoriels JSONPath). Gardez-le sous les yeux pendant la lecture:

  • `store.book` - un tableau d'objets avec `category`, `author`, `title`, `price` et parfois `isbn`.
  • `store.bicycle` - un objet imbrique avec `color` et `price`.
  • Si votre payload est arrive sur une seule ligne, formatez-le d'abord avec le Minificateur et formateur JSON, puis interrogez.

$ et @

`$` est la racine de la valeur JSON que vous avez colle - l'objet ou le tableau entier. Toute expression utile commence la. `@` n'a de sens que dans un filtre: cela veut dire "l'element courant en cours de test." Hors filtre, `@` n'est pas un curseur libre.

  • `$` - la racine du document.
  • `@.price` dans `[?()]` - le champ `price` de l'element teste.
  • `$.store.book[?(@.isbn)]` - les livres qui ont la cle `isbn` (existence).
  • Un chemin sans `$` est souvent refuse par les testeurs stricts - commencez toujours par `$`.

Point vs crochets

La notation point est un raccourci pour les identifiants simples: `$.store.book`. La notation crochets est la forme explicite: `$['store']['book']`. Utilisez les crochets quand la cle n'est pas un identifiant plat (espaces, tirets, chiffres en tete) ou quand vous voulez le style de chemin normalise RFC 9535 que beaucoup d'outils affichent dans le tableau des matches.

  • `$.store.bicycle.color` - correct pour des cles ordinaires.
  • `$['content-type']` - necessaire quand la cle n'est pas un identifiant style JS.
  • `$['store']['book'][0]['title']` - chemin singulier normalise vers un noeud (style RFC 9535 §2.7).
  • Les index sont toujours entre crochets: `$.store.book[0]`, pas `$.store.book.0`.

* et ..

`*` est un joker pour "chaque enfant a ce niveau." `..` est la descente recursive: on parcourt l'arbre et on collecte les matches a toute profondeur. Les jokers restent peu profonds; la descente peut surprendre sur de gros documents.

  • `$.store.book[*].title` - le titre de chaque livre (un niveau d'items du tableau).
  • `$.store.*` - a la fois `book` et `bicycle` sous `store`.
  • `$..author` - chaque `author` n'importe ou sous la racine.
  • `$..price` - les prix des livres et celui du bicycle ensemble - resserrez le chemin si vous n'en vouliez qu'un.

Slices

Les slices de tableau utilisent `start:end:step` a la Python entre crochets. Les bornes omises veulent dire "depuis le debut" ou "jusqu'a la fin." Les index negatifs comptent depuis la fin quand l'implementation les accepte.

  • `$.store.book[0:2]` - les deux premiers livres (index 0 et 1).
  • `$.store.book[-1:]` - le dernier livre, sur les moteurs qui autorisent les index negatifs.
  • `$.store.book[::2]` - un livre sur deux quand le step est supporte.
  • Les slices selectionnent des items du tableau; enchainez un champ apres: `$.store.book[0:2].title`.

Un filtre simple

Les filtres vivent dans `[?(...)]` et gardent les items ou l'expression est vraie. `@` est l'element courant. Les comparaisons ne coercionnent en general pas les types comme le JavaScript lache - `1 == "1"` est souvent faux. Gardez les filtres ennuyeux: egalite, inegalite, compare numerique, `&&`, `||`, `!` et 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 le filtre sur le tableau que vous parcourez, pas sur une racine objet seule sauf si la racine est un tableau.

RFC 9535 vs l'ancien dialecte Goessner

L'article de Stefan Goessner en 2007 a popularise JSONPath et beaucoup de bibliotheques copient encore ses exemples. RFC 9535 (2024) est le standard IETF: grammaire plus claire, chemins normalises et moins d'echappatoires "eval n'importe quoi". Les selecteurs script comme `[(@.length-1)]` et le JavaScript libre dans les filtres appartiennent au Far West, pas a un testeur navigateur sur.

  • RFC 9535 - operateurs standardises, chemins normalises comme `$['store']['book'][0]`, concu pour des implementations interoperables.
  • Echantillons de l'ere Goessner - encore partout dans les blogs; verifiez avant de les mettre en production.
  • Sous-ensembles sans eval - ce qu'il faut pour des payloads d'API colles. Refusez les selecteurs script; n'executez jamais le chemin comme du JavaScript.
  • Quand deux outils divergent, regardez quel dialecte ils revendiquent - pas lequel "semble" juste.

Pas la spec complete

Cet article est un aide-memoire d'expressions du quotidien. Pour le detail normatif, lisez RFC 9535. Pour des essais prives sur votre JSON, utilisez le Testeur JSONPath.

Cinq exemples a coller

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

  • `$.store.book[*].title` - tous les titres en liste.
  • `$..author` - chaque auteur via descente recursive.
  • `$.store.book[0:2]` - les deux premiers objets livre.
  • `$.store.book[?(@.price < 10)]` - livres a prix inferieur a 10.
  • `$.store.book[?(@.price < 10)].title` - meme filtre, titres seulement.

Apres avoir extrait une liste plate d'enregistrements, vous voudrez peut-etre une vue tableur - passez un tableau JSON d'objets dans le Convertisseur JSON vers CSV. Pour des blobs d'API imbriques que vous explorez encore, restez en JSONPath jusqu'a ce que la forme soit claire.

Questions frequentes

Tout JSONPath commence-t-il par $?

Oui en pratique. `$` nomme la racine. Les outils stricts rejettent les chemins qui l'omettent.

Quand utiliser @?

Uniquement dans les filtres `[?()]`, comme element courant. Ce n'est pas un substitut de `$` en debut de chemin.

Pourquoi zero match?

Un chemin valide peut ne rien matcher. Causes frequentes: filtrer une racine objet au lieu d'un tableau, typo sur une cle, ou attendre la coercion de types JavaScript. Essayez `$..field` pour confirmer que le champ existe, puis resserrez.

JSONPath est-il la meme chose que JMESPath ou jq?

Non. Idee voisine, syntaxe et bibliotheques differentes. Choisissez un dialecte par codebase et tenez-vous-y.

Puis-je tester une reponse d'API privee en securite?

Oui si l'evaluateur tourne dans le navigateur sans upload. Le Testeur JSONPath est fait pour ca - collez, interrogez, copiez le JSON extrait ou les chemins normalises.

Essayez sur ToolsMinify

Tous les outils ci-dessous tournent dans le navigateur - gratuits, sans compte, sans upload:

Essayez gratuitement

Ouvrez le Testeur JSONPath, chargez l'echantillon librairie et collez `$.store.book[?(@.price < 10)].title`. Vous devriez voir les titres bon marche - tout sur votre appareil.

Utilisez Testeur JSONPath - gratuit

Ouvrez l'outil en ligne et appliquez ce que vous avez appris dans ce guide.

Ouvrir Testeur JSONPath

Articles connexes