Utilia

Testeur JSONPath

Testez vos expressions JSONPath sur votre propre JSON, dans le navigateur. Filtres, tranches, descente récursive, chemins et pointeurs JSON.

Comment tester une expression JSONPath

  1. Collez votre JSON dans Données JSON, ou cliquez sur Charger l’exemple pour utiliser la librairie classique des exemples JSONPath.
  2. Saisissez une expression dans Expression JSONPath, ou choisissez-en une dans Exemples.
  3. Le résultat se met à jour pendant la saisie ; Exécuter relance la requête. La ligne d’état indique le nombre de résultats.
  4. Avec Afficher, basculez entre Valeurs, Chemins, Pointeurs JSON et Chemins et valeurs, puis copiez le résultat.

La syntaxe JSONPath en bref

Syntaxe Signification Exemple
$ la racine du document $
.nom ou ['nom'] un enfant $.store.bicycle
* tous les enfants $.store.*
.. descente récursive, à toute profondeur $..author
[n] indice de tableau, à partir de 0 $..book[2]
[début:fin:pas] tranche ; un nombre négatif compte depuis la fin $..book[-1:]
[a,b] union $..book[0,1]
[?(expr)] filtre $..book[?(@.price < 10)]
^ le parent de chaque résultat $..book[?(@.price > 20)]^
~ le nom de la propriété au lieu de sa valeur $.store.*~

Les résultats suivent l’ordre du document. Chemins donne des chemins normalisés comme $['store']['book'][0]['title'], et Pointeurs JSON la forme RFC 6901 /store/book/0/title, pratique pour JSON Patch ou pour interpréter les chemins d’erreur d’un validateur JSON Schema.

Les filtres : ce qui est pris en charge

Les filtres sont évalués par jsonpath-plus en mode sûr : l’expression est analysée puis interprétée par un petit évaluateur, sans jamais passer par eval ni new Function. Entre [?( et )], vous pouvez utiliser :

  • @ pour l’élément courant, @.champ et @['champ'] pour ses membres, @root pour le document entier ($ n’est pas disponible dans un filtre) ;
  • les comparaisons ==, !=, ===, !==, <, <=, >, >= ;
  • la logique &&, ||, !, l’arithmétique + - * / % et le ternaire a ? b : c ;
  • les littéraux chaîne, nombre, true, false, null et expression régulière ;
  • les méthodes des valeurs elles-mêmes, par exemple @.title.startsWith('S'), @.tags.includes('new') ou @.title.match(/lord/i) ;
  • @property (la clé ou l’indice de l’élément courant), @parent et @path (son chemin normalisé), à la manière de jsonpath-plus.

L’accès à constructor, à __proto__ et au constructeur Function est bloqué. Si un filtre échoue sur un élément, par exemple @.isbn.startsWith('0') sur un livre sans isbn, cet élément ne correspond tout simplement pas ; une erreur de syntaxe dans l’expression est, elle, signalée. Les filtres écrits à la manière de la RFC 9535, [?@.price < 10] sans parenthèses, sont acceptés et lus comme [?(@.price < 10)]. Les fonctions de la RFC 9535 comme length(), count(), match() ou search() ne sont pas disponibles : utilisez les méthodes JavaScript, par exemple @.name.length.

Les sélecteurs de type de jsonpath-plus fonctionnent aussi en fin de chemin : $..*@number() renvoie tous les nombres, et @string(), @boolean(), @array(), @object(), @null() et @integer() font de même pour les autres types.

Questions fréquentes

Mon JSON est-il envoyé sur un serveur ?

Non. L’analyse et l’évaluation se font dans votre navigateur ; vos données ne quittent jamais votre ordinateur.

Pourquoi mon filtre ne renvoie-t-il rien ?

Vérifiez que le chemin situé avant le filtre sélectionne bien un tableau ou un objet : $.store.book[?(@.price < 10)] filtre les livres, alors que $.store[?(@.price < 10)] examine book et bicycle. Une propriété absente d’un élément vaut undefined, et toute comparaison avec elle est fausse.

Quelle différence entre `==` et `===` ?

Comme en JavaScript, == convertit les types ("10" == 10 est vrai), alors que === compare le type et la valeur.

Pourquoi le résultat est-il limité ?

Seuls les 10 000 premiers résultats sont écrits, pour que la page reste fluide ; la ligne d’état donne le nombre total.

JSONPath est-il normalisé ?

Oui, depuis 2024, par la RFC 9535. Les implémentations diffèrent encore, surtout pour les filtres ; cet outil suit jsonpath-plus, qui reprend la syntaxe du JSONPath original de Stefan Goessner.