Testeur JSONPath

Tester les expressions JSONPath sur du JSON

Entree JSON
1
2
3
4
5
6
7
8
Traite localement dans votre navigateur
Comprendre JSONPath
TL;DR

JSONPath est un langage de requete pour extraire des donnees de documents JSON -- comme XPath pour le XML. Naviguez dans les objets et tableaux imbriques sans ecrire de code.

Qu’est-ce que JSONPath ?

JSONPath est un langage de requete permettant d’extraire des valeurs specifiques de documents JSON. Il fournit une syntaxe concise pour naviguer dans les objets et tableaux imbriques, filtrer les elements selon des conditions et selectionner plusieurs valeurs a la fois — le tout sans ecrire de code procedural.

Pensez a JSONPath comme l’equivalent JSON de XPath pour le XML, ou des selecteurs CSS pour le HTML. Au lieu d’ecrire des boucles et des instructions conditionnelles pour parcourir un arbre JSON, vous ecrivez une seule expression qui decrit les donnees souhaitees. Le moteur JSONPath gere le parcours et retourne les valeurs correspondantes.

JSONPath est particulierement precieux lorsque vous travaillez avec des reponses d’API. Les API modernes retournent souvent des structures JSON profondement imbriquees — une seule reponse peut contenir des dizaines d’objets et de tableaux imbriques. JSONPath vous permet d’extraire chirurgicalement les champs dont vous avez besoin sans naviguer manuellement a chaque niveau d’imbrication.

Syntaxe JSONPath

Chaque expression JSONPath commence par $, qui represente la racine du document JSON. A partir de la, vous enchainez les operateurs pour naviguer plus profondement dans la structure.

Reference syntaxique

OperateurDescriptionExemple
$Objet racine$ retourne le document entier
.keyMembre enfant$.store accede a la propriete store
..keyDescente recursive$..price trouve tous les champs price a n’importe quelle profondeur
[0]Index de tableau$.books[0] retourne le premier livre
[*]Joker$.books[*] retourne tous les livres
[0:3]Tranche de tableau$.books[0:3] retourne les livres aux index 0, 1, 2
[?(@.price<10)]FiltreRetourne les elements ou la condition est vraie
@Element courantUtilise a l’interieur des expressions de filtre

La notation pointee (.key) accede a une propriete nommee de l’objet courant. Vous pouvez enchainer les points pour parcourir plusieurs niveaux :

$.store.address.city

Cela navigue de la racine vers store, puis address, puis city. Si une cle intermediaire n’existe pas, le resultat est vide.

Les elements de tableau sont accedes par index base zero ([0], [1], etc.) ou par joker ([*] pour tous les elements). Les index negatifs comptent a partir de la fin : [-1] retourne le dernier element.

Le decoupage de tableau suit le motif [start:end:step], similaire a Python :

  • [0:3] — Elements aux index 0, 1, 2
  • [1:] — Tous les elements a partir de l’index 1
  • [::2] — Un element sur deux

Descente recursive

L’operateur .. recherche recursivement dans l’ensemble de l’arbre du document. $..price trouve chaque propriete nommee price, quelle que soit la profondeur de son imbrication. C’est puissant mais peut etre lent sur les documents volumineux car il parcourt chaque noeud.

Expressions de filtre

Les filtres utilisent la syntaxe [?(@.condition)] ou @ fait reference a l’element courant. Les filtres supportent les operateurs de comparaison (==, !=, <, >, <=, >=) et les operateurs logiques (&&, ||).

Exemples :

  • $.books[?(@.price < 10)] — Livres a moins de 10
  • $.books[?(@.author == 'Tolkien')] — Livres de Tolkien
  • $.books[?(@.price < 20 && @.category == 'fiction')] — Livres de fiction a petit prix

Parcours de l’arbre JSONPath

JSONPath Tree Navigation A tree diagram showing how the expression $.store.books[0].title traverses from root ($) through store, books array, first element [0], to the title field. $.store.books[0].title $ store meta books [] city [0] [1] title price Result "The Hobbit" Traversed path Not selected

JSONPath vs jq

Bien que JSONPath et jq interrogent tous deux du JSON, ils servent des contextes differents :

CaracteristiqueJSONPathjq
EnvironnementBibliotheques, navigateurs, APILigne de commande
Style de syntaxeNotation pointee ($.store.books)Base sur les pipes (.store.books)
TransformationLecture seule (requete)Lecture + transformation + construction
ComplexiteRequetes simplesPipelines de donnees complexes
StandardRFC 9535 (2024)Standard de facto en CLI
Ideal pourTests d’API, requetes de configTraitement de logs, pipelines de donnees

JSONPath est ideal lorsque vous devez extraire des donnees du JSON sans les transformer — par exemple, tester des reponses d’API ou construire des requetes de configuration. jq est plus puissant lorsque vous devez remodeler, filtrer, agreger ou construire de nouvelles structures JSON.

Cas d’utilisation courants

  • Debogage d’API : collez une reponse d’API complexe et ecrivez des requetes JSONPath pour valider que les champs attendus existent et contiennent des valeurs correctes
  • Extraction de configuration : extraire des valeurs specifiques de fichiers de configuration JSON volumineux sans analyser la structure entiere dans le code
  • Assertions de test : les tests automatises utilisent JSONPath pour verifier des valeurs specifiques dans les reponses d’API, rendant le code de test plus lisible que l’acces aux proprietes imbriquees
  • Pipelines de transformation de donnees : extraction de champs specifiques de documents JSON dans le cadre de workflows ETL
  • Documentation : les expressions JSONPath dans la documentation d’API montrent aux consommateurs exactement comment acceder a des champs de reponse specifiques

Essayez ces exemples

Filtrer les livres par prix Valide

Cette expression JSONPath navigue vers l'objet 'store', filtre le tableau 'books' pour les elements dont le prix est inferieur a 10, et retourne uniquement le champ 'title'. Le symbole @ fait reference a l'element en cours d'evaluation.

$.store.books[?(@.price < 10)].title
Chemin vers une cle inexistante Valide

Interroger un chemin qui n'existe pas dans le document JSON retourne un ensemble de resultats vide -- pas une erreur. C'est utile pour verifier en toute securite si une cle existe sans provoquer de plantage.

$.nonexistent