Qu'est-ce que JSONPath ?
JSONPath est un langage de requête pour JSON, analogue à XPath pour XML. Une expression JSONPath navigue dans un document JSON et retourne une ou plusieurs valeurs correspondant au chemin spécifié. La racine d'un document est représentée par $, les clés d'objet sont accessibles avec la notation pointée ($.user.name) ou la notation entre crochets, et les éléments de tableau par leur index ou avec un joker ($.items[*]).
JSONPath est largement utilisé dans les systèmes de configuration, les passerelles API, les frameworks de test et les pipelines de transformation de données. AWS EventBridge utilise JSONPath pour filtrer les événements ; Kubernetes l'utilise pour faire correspondre les objets.
Le langage prend en charge plusieurs opérateurs puissants : l'opérateur de descente récursive (..) recherche une clé à tous les niveaux, les expressions de filtre (?(...)) sélectionnent les éléments qui satisfont une condition, et l'opérateur de tranche fonctionne comme le découpage Python sur les tableaux.
Modèles JSONPath courants
Notation pointée et entre crochets : $.store.book[0].title récupère le titre du premier livre. La notation entre crochets est requise quand une clé contient des caractères spéciaux.
Jokers et tranches : $.store.book[*].author retourne tous les auteurs. $.store.book[-1:] retourne uniquement le dernier élément. $.store.book[0:3] retourne les trois premiers éléments.
Descente récursive et filtres : $..price retourne toutes les valeurs de prix à n'importe quel niveau d'imbrication. $.store.book[?(@.price < 10)] retourne tous les livres avec un prix inférieur à 10.
JSONPath vs. JMESPath vs. jq
JSONPath (standardisé dans RFC 9535) est la notation de requête JSON la plus largement reconnue et est supportée nativement dans de nombreux langages et plateformes.
JMESPath est utilisé par AWS CLI et les SDK. Il dispose d'une grammaire plus formelle et supporte des fonctions intégrées (sort_by, keys, values, length, contains).
jq est un processeur JSON en ligne de commande avec son propre mini-langage significativement plus puissant, mais avec une courbe d'apprentissage plus raide. Notre outil JSONPath se concentre sur la norme RFC 9535.