Testeur JSONPath
Tester les expressions JSONPath sur du JSON
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
| Operateur | Description | Exemple |
|---|---|---|
$ | Objet racine | $ retourne le document entier |
.key | Membre enfant | $.store accede a la propriete store |
..key | Descente 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)] | Filtre | Retourne les elements ou la condition est vraie |
@ | Element courant | Utilise a l’interieur des expressions de filtre |
Navigation dans les objets
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.
Navigation dans les tableaux
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 vs jq
Bien que JSONPath et jq interrogent tous deux du JSON, ils servent des contextes differents :
| Caracteristique | JSONPath | jq |
|---|---|---|
| Environnement | Bibliotheques, navigateurs, API | Ligne de commande |
| Style de syntaxe | Notation pointee ($.store.books) | Base sur les pipes (.store.books) |
| Transformation | Lecture seule (requete) | Lecture + transformation + construction |
| Complexite | Requetes simples | Pipelines de donnees complexes |
| Standard | RFC 9535 (2024) | Standard de facto en CLI |
| Ideal pour | Tests d’API, requetes de config | Traitement 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
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 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