araç köşesi

Testeur JSONPath

Essayez une expression JSONPath sur le JSON que vous collez ; voyez les valeurs trouvées, leurs chemins et le nombre de résultats

Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.

Comment ça marche

JSONPath permet de sélectionner une partie d'un gros JSON avec une expression d'une ligne ; les tests Postman, les passerelles d'API et la commande kubectl -o jsonpath de Kubernetes utilisent ce langage. Collez le JSON à gauche et écrivez l'expression : le résultat se met à jour à droite pendant la saisie. Toute expression commence par $, la racine du document : $.store.book[0].title donne le titre du premier livre, $..author tous les champs author du document, quel que soit leur niveau. Un filtre entre crochets, [?(@.price<10)], garde les éléments qui respectent la condition ; @ désigne l'élément examiné. Sur le JSON d'exemple, $.store.book[?(@.price<10)].title renvoie deux titres : Sayings of the Century et Moby Dick. Si vous oubliez le $ du début, l'outil l'ajoute et l'indique sous le résultat. Sans correspondance, le résultat est un tableau vide ; vérifiez alors les majuscules et minuscules des noms. La sortie en chemins donne l'adresse exacte de chaque valeur, donc la suite de clés à utiliser dans votre code. Dans le JSON comme dans l'expression, les décimaux s'écrivent toujours avec un point (8.95), jamais avec une virgule.

Cet outil est aussi connu sous le nom de testeur jsonpath, jsonpath tester, jsonpath en ligne, exemple jsonpath, expression jsonpath.

Qu'est-ce que JSONPath ?

JSONPath est un court langage de requête qui sélectionne des valeurs dans un document JSON ; il joue pour le JSON le rôle que XPath joue pour le XML. $ désigne la racine, le point un champ enfant, [0] un élément de tableau, [*] tous les éléments, .. tous les niveaux et [?(...)] un filtre conditionnel. Il est standardisé depuis 2024 par la RFC 9535 et utilisé par Postman, Kubernetes et de nombreux outils d'API.

Qu'est-ce que Expression de filtre ?

Un filtre garde, parmi les éléments d'un tableau, ceux qui respectent une condition : [?(@.price<10)] garde les éléments dont le prix est inférieur à 10. @ désigne l'élément testé ; on peut utiliser ==, !=, <, >, && et ||. Écrit sans comparaison, comme [?(@.isbn)], le filtre garde les éléments où le champ existe et n'est pas vide.

Quelle est la différence entre JSONPath et JSON Pointer ?

JSON Pointer (RFC 6901) est l'adresse exacte d'une seule valeur : /store/book/0/author renvoie au plus un résultat et ne connaît ni joker ni filtre ; on le trouve dans JSON Patch et dans les $ref de JSON Schema. JSONPath est un langage de requête : une seule expression comme $..author peut renvoyer plusieurs valeurs, et on peut écrire des filtres conditionnels. Pour modifier une valeur ou y faire référence, utilisez JSON Pointer ; pour chercher et filtrer des données, utilisez JSONPath.

Les expressions JSONPath les plus utiles (avec le JSON d'exemple)

L'exemple de la page est le JSON de librairie publié par Stefan Goessner en 2007 avec la première description de JSONPath ; la plupart des documentations le reprennent. Chaque expression ci-dessous a été lancée sur cet exemple, et le résultat indiqué est celui que l'outil affiche.

  • $..author → les 4 auteurs (.. cherche à tous les niveaux)
  • $.store.book[?(@.price<10)].title → 2 titres : Sayings of the Century et Moby Dick
  • $..book[?(@.isbn)] → les 2 livres qui ont un champ isbn (Moby Dick, The Lord of the Rings)
  • $..book[-1:] → le dernier livre ; $..book[0,1] → les deux premiers
  • $..book.length → nombre de livres (4)
  • $..price → 5 prix : les 4 livres et le vélo (19.95)

Limites honnêtes : écarts avec la RFC 9535 et sécurité

JSONPath est devenu un standard en 2024 avec la RFC 9535. Cet outil utilise la bibliothèque jsonpath-plus, très répandue, qui suit l'ancienne syntaxe de Goessner : les filtres s'écrivent avec parenthèses ([?(@.price<10)] ; la RFC les rend facultatives), les propriétés JavaScript comme .length fonctionnent, et les fonctions match() et search() de la RFC n'existent pas. La même expression peut donner un résultat un peu différent dans une autre bibliothèque, surtout pour les comparaisons de texte dans un filtre.

Les filtres ne passent pas par l'eval du navigateur mais par l'interpréteur sûr de la bibliothèque : on ne peut pas y introduire du code à exécuter. Tester un champ absent dans un filtre (@.publisher.name alors que publisher n'existe pas) ne produit pas d'erreur : l'élément est simplement écarté.

Questions fréquentes

Comment tester une expression JSONPath ?

Collez le JSON dans le panneau de gauche de cette page et écrivez l'expression dans la case JSONPath. Les valeurs trouvées s'affichent aussitôt à droite, et le nombre de résultats est indiqué en dessous. Avec l'option Chemins trouvés, vous voyez l'adresse complète de chaque valeur dans le JSON.

Quelle est la différence entre $. et $.. ?

Un point descend d'un seul niveau : $.store.bicycle donne uniquement le champ bicycle de l'objet store. Deux points cherchent à tous les niveaux : $..price renvoie les prix des livres et celui du vélo, soit cinq valeurs. Si vous ne savez pas où se trouve un champ, utilisez ..

Comment comparer du texte dans un filtre ?

Mettez le texte entre guillemets : $.store.book[?(@.category=='fiction')].title donne trois titres. Vous pouvez relier plusieurs conditions avec && (et) ou || (ou) : [?(@.category=='fiction' && @.price<15)] garde Sword of Honour et Moby Dick. Si un guillemet n'est pas fermé, l'outil le signale.

Mon JSON est-il envoyé à un serveur ?

Non. La lecture du JSON et l'exécution de l'expression se font entièrement dans votre navigateur ; vous pouvez tester une réponse qui contient une clé d'API ou des données clients.