§

Tester des expressions JSONPath

Format de sortie:
Référence rapide JSONPath
Token Meaning
$Élément racine du document
@Élément courant (utilisé dans les expressions de filtre)
.Opérateur enfant : sélectionne un enfant nommé
..Descente récursive : recherche tous les descendants
*Joker : correspond à n'importe quel élément ou propriété
[*]Tous les éléments d'un tableau
[n]Élément de tableau à l'indice n (base zéro)
[start:end]Tranche de tableau de start jusqu'à end (exclu)
[?(@.x)]Filtre : éléments où la propriété x existe
[?(@.x==1)]Filtre : éléments où la propriété x vaut 1
[(@.length-1)]Expression de script : dernier élément d'un tableau

JSONPath intervient partout où un contrat d'API doit être vérifié sur une vraie charge utile. Les équipes fintech françaises rédigeant des suites de régression Postman font des assertions sur les champs de réponse avec JSONPath dans l'onglet Tests, les scripts de test de charge k6 extraient des valeurs des corps de réponse API avec jsonpath() pour contrôler les seuils SLA dans les blocs check(), et les runbooks d'astreinte SRE recourent à des expressions de filtre comme [?(@.status=="error")] pour trancher les journaux JSON avant d'alerter. Exécuter ces expressions dans un onglet du navigateur garde les charges utiles propriétaires, les données personnelles client et les réponses d'API en prépublication hors de tout service d'interrogation hébergé.

Qu'est-ce que JSONPath ?

JSONPath est un langage de requête pour les documents JSON, l'équivalent JSON de XPath pour le XML. Stefan Goessner l'a proposé en 2007 comme une façon courte et lisible de pointer un nœud dans un arbre JSON sans écrire d'analyseur. Une expression commence par le sélecteur racine $ et enchaîne des accesseurs de propriétés, des indices de tableau, des jokers, une descente récursive et des conditions de filtre jusqu'à sélectionner les nœuds souhaités. En 2024, l'IETF a publié la RFC 9535 pour standardiser la syntaxe qui s'était fragmentée entre implémentations ; ce testeur s'appuie sur jsonpath-plus, une implémentation JavaScript largement utilisée qui couvre le brouillon Goessner, la majeure partie de la RFC 9535 et quelques opérateurs d'extension en plus.

Comment fonctionne JSONPath

Une expression JSONPath se lit de gauche à droite et parcourt un document JSON un pas à la fois. Chaque pas prend l'ensemble des nœuds qui ont survécu au pas précédent et le réduit davantage. Le pipeline d'évaluation complet :

  1. Ancrer avec le sélecteur racine $. Toute expression commence ici, pointant sur la valeur de niveau supérieur, qu'il s'agisse d'un objet ou d'un tableau. Les noms de propriétés sans $ en tête ne sont pas du JSONPath valide.
  2. Descendre dans les membres enfants avec la notation pointée ($.store.book) ou la notation crochetée ($['store']['book']). La notation crochetée est nécessaire quand une clé contient une espace, un trait d'union ou tout caractère qui n'est pas un identifiant valide.
  3. Chercher à tous les niveaux à la fois avec l'opérateur de descente récursive ... L'expression $..author recueille chaque valeur author n'importe où dans l'arbre, quelle que soit la profondeur. C'est l'opérateur que JMESPath n'a pas.
  4. Sélectionner des éléments de tableau par indice ([0], [-1] pour le dernier élément dans jsonpath-plus), les trancher avec la notation [start:end] ([0:3] retourne les trois premiers), ou prendre chaque élément avec le joker [*].
  5. Filtrer les éléments avec un prédicat dans [?(...)]. Dans le prédicat, @ désigne l'élément courant, donc [?(@.price<10)] ne garde que les éléments dont le champ price est inférieur à 10. Les filtres se composent avec le reste du chemin, vous pouvez donc filtrer puis descendre, ou descendre puis filtrer.
  6. Choisir le format de sortie. Valeurs retourne les données correspondantes elles-mêmes. Chemins retourne le JSONPath de chaque correspondance pour voir ce que le moteur a résolu. Pointeurs retourne le Pointeur JSON RFC 6901 équivalent pour chaque correspondance, utile quand le consommateur aval est JSON Patch ou un validateur de schéma JSON.

Pourquoi utiliser ce testeur JSONPath ?

  • Votre JSON ne quitte jamais le navigateur. La requête s'exécute à l'intérieur de la page, donc les fixtures de production, les données personnelles client et les réponses d'API en prépublication restent sur votre machine.
  • Le moteur est jsonpath-plus 9.x, la même bibliothèque qui alimente de nombreuses suites de tests de production et assertions CI. Les résultats que vous voyez ici correspondent aux résultats que votre pipeline de compilation obtiendra.
  • Trois modes de sortie couvrent les consommateurs avals courants : Valeurs brutes pour copier-coller, Chemins pour déboguer la résolution du moteur, et Pointeurs RFC 6901 pour les workflows JSON Patch et JSON Schema.
  • Les expressions de filtre s'exécutent avec preventEval: true, de sorte qu'une requête collée ne peut pas exécuter du JavaScript arbitraire sur la page hôte. C'est important quand l'expression provient d'un message Slack, d'un ticket Jira ou du presse-papiers d'un collègue.

Applications courantes de JSONPath

JSONPath apparaît partout où le code doit extraire un champ d'une charge utile JSON sans écrire une descente récursive à la main :

  • Tests Postman : l'onglet Tests de Postman expose pm.response.json() avec un accès de style JSONPath pour les assertions. Les équipes écrivent une seule expression comme $.data.user.email pour extraire un champ d'une réponse et en faire l'assertion en CI.
  • Tests de charge k6 : les scripts k6 appellent jsonpath() dans un bloc check() pour extraire des valeurs des corps de réponse et vérifier les seuils SLA. La même expression qui a prouvé un contrat dans Postman peut contrôler un test de charge sous k6.
  • DSL JSON pour les transformations de données : AWS Step Functions évalue JSONPath dans InputPath, ResultPath et Parameters pour remodeler les charges utiles d'événements entre les états. Argo Workflows utilise JSONPath dans withParam pour ventiler les tâches sur un tableau. Kubernetes kubectl -o jsonpath utilise la même syntaxe pour extraire des champs des objets du cluster.

Exemple concret

La fixture canonique de Goessner est le document librairie avec quatre livres, chacun portant category, author, title et price. Sur cette fixture, l'expression $.store.book[?(@.price<10)].title s'exécute en trois étapes. D'abord, $.store.book résout vers le tableau des quatre livres. Ensuite, le filtre [?(@.price<10)] ne garde que le livre au prix inférieur à 10 (l'entrée à 8,95). Enfin, .title extrait le titre de ce livre. Le résultat est ["Sayings of the Century"]. Passer en Chemins retourne ["$['store']['book'][0]['title']"], et Pointeurs retourne ["/store/book/0/title"].

Prototypez vos expressions ici, puis déposez-les directement dans Postman, k6, kubectl ou une machine à états Step Functions. Collez, interrogez, copiez. Rien ne passe par le réseau.

Qu'est-ce que JSONPath ?

JSONPath est un langage de requête pour les documents JSON, analogue à XPath pour le XML. Proposé par Stefan Goessner en 2007 et standardisé par l'IETF sous la RFC 9535 en 2024, il utilise une syntaxe d'expression compacte commençant par $ (la racine du document) et supporte la notation pointée, les indices de tableau, les jokers, les tranches, la descente récursive (..), et les expressions de filtre ([?(...)]) pour sélectionner des nœuds dans un arbre JSON.

En quoi JSONPath diffère-t-il de JMESPath ou jq ?

Les trois interrogent du JSON, mais leurs grammaires et objectifs diffèrent. JMESPath est la norme AWS CLI / SDK : plus strict que JSONPath, sans descente récursive, conçu pour une projection prévisible sans effets de bord. jq est un langage de scripting Turing-complet qui non seulement interroge le JSON mais le transforme, réduit et diffuse. JSONPath se situe entre les deux : plus expressif que JMESPath grâce à la descente récursive et aux filtres, plus léger que jq, et la syntaxe la plus largement supportée dans les outils de test à usage général (Postman, Playwright, REST Assured, kubectl, Step Functions). Ce testeur implémente JSONPath.

Quel dialecte ce testeur utilise-t-il ?

Ce testeur s'appuie sur jsonpath-plus 9.x. Cette bibliothèque implémente la spécification Goessner 2007, couvre la majeure partie de la RFC 9535, et ajoute des opérateurs d'extension comme les vérifications de type (@.string(), @.number(), @.boolean()) et la navigation parentale (^). Le flag preventEval: true est toujours activé, de sorte que les prédicats de filtre s'exécutent via un interpréteur sécurisé plutôt que le built-in JavaScript eval(). Une requête collée ne peut pas exécuter de code arbitraire sur cette page.

Puis-je copier des valeurs correspondantes individuelles ?

Oui. Le bouton Copier dans le presse-papiers copie le bloc de résultats complet sous forme de tableau JSON. Pour récupérer une seule valeur, passez le mode de sortie sur Valeurs, puis sélectionnez la ligne souhaitée dans la zone de texte des résultats et utilisez le raccourci de copie normal de votre navigateur (Ctrl/Cmd + C). La sortie est du texte JSON plain, qui se colle proprement dans un éditeur de code, un terminal, un test Postman ou un message Slack.