Dans cet article
Qu'est-ce que JSONPath ?
JSONPath est un langage de requête pour extraire des données de documents JSON. Tout comme XPath navigue dans les documents XML, JSONPath navigue dans les structures JSON à l'aide d'une syntaxe d'expression concise. Il a été formalisé dans RFC 9535 (février 2024) après des années de spécification informelle.
Les expressions JSONPath commencent par $ (l'élément racine) et utilisent la notation par point ou par crochets pour traverser le document. Le langage prend en charge les caractères génériques, la descente récursive, le découpage de tableau et les expressions de filtre — ce qui permet d'extraire des valeurs profondément imbriquées avec une seule expression.
Syntaxe JSONPath
JSONPath fournit plusieurs opérateurs pour naviguer et filtrer les structures JSON.
- Racine ($) — chaque expression JSONPath commence par $ représentant l'objet racine ou le tableau du document JSON
- Notation par point ($.store.book) — accédez aux propriétés enfants par nom, similaire à l'accès aux objets JavaScript. Les points séparent chaque niveau d'imbrication.
- Notation par crochets ($['store']['book']) — syntaxe alternative utilisant des noms de propriétés entre guillemets dans des crochets. Obligatoire lorsque les noms de propriétés contiennent des caractères spéciaux ou des espaces.
- Caractère générique (*) — correspond à tous les éléments au niveau actuel. $.store.* renvoie tous les enfants directs de store ; $[*] renvoie tous les éléments d'un tableau racine.
- Descente récursive (..) — recherche tous les descendants à n'importe quelle profondeur. $..price trouve chaque champ 'price' n'importe où dans le document, quel que soit le niveau d'imbrication.
- Tranches de tableau ([début:fin:pas]) — sélectionne une plage d'éléments de tableau. $[0:3] renvoie les trois premiers éléments ; $[-2:] renvoie les deux derniers ; $[::2] renvoie un élément sur deux.
Exemples d'expressions JSONPath
Voici des exemples pratiques montrant comment les expressions JSONPath extraient des données de structures JSON réelles.
- Extraction de valeurs imbriquées — $.users[0].name récupère le nom du premier utilisateur. $.config.database.host obtient une valeur de configuration profondément imbriquée.
- Filtrage des tableaux — $.users[?(@.age > 18)] renvoie tous les utilisateurs de plus de 18 ans. $.products[?(@.price < 50)] trouve les produits abordables. Les filtres utilisent @ pour référencer l'élément courant.
- Requêtes multi-niveaux — $..author renvoie chaque champ auteur à n'importe quelle profondeur. $.store.book[*].title renvoie tous les titres de livres. $.orders[*].items[*].sku extrait les SKU dans toutes les commandes et articles.
Ces expressions peuvent être combinées pour créer des requêtes puissantes. Par exemple, $.store.book[?(@.price < 10)].title renvoie les titres de tous les livres moins chers que 10.
Essayez gratuitement — sans inscription
Tester des expressions JSONPath →Cas d'utilisation courants
JSONPath est utilisé partout où des données structurées doivent être interrogées ou extraites de documents JSON.
- Extraction de réponses API — extrayez des champs spécifiques de réponses API complexes sans écrire de code d'analyse personnalisé. Testez les expressions sur des exemples de réponses avant de coder.
- Analyse de configuration — extrayez des valeurs de fichiers de configuration JSON dans les pipelines CI/CD, les scripts de déploiement et les outils d'infrastructure en tant que code
- Analyse des journaux — interrogez les journaux JSON structurés pour trouver des événements spécifiques, des modèles d'erreurs ou des métriques de performance dans les grands fichiers journaux
- Transformation des données — utilisez JSONPath dans les pipelines ETL pour sélectionner, filtrer et remodeler les données JSON lors des opérations d'importation/exportation
Plusieurs langages de requête ciblent les documents JSON. Chacun a ses forces différentes et son soutien d'écosystème.
- JSONPath — syntaxe de requête standard (RFC 9535), largement prise en charge dans les bibliothèques de programmation (Java, Python, JavaScript, PHP). Idéal pour l'extraction et le filtrage simples. Pas de transformation intégrée.
- JQ — processeur JSON en ligne de commande avec un puissant langage fonctionnel. Prend en charge la transformation, le calcul et la mise en forme de la sortie. Idéal pour les scripts shell et le traitement des données en ligne de commande.
- JMESPath — langage de requête utilisé par AWS CLI et Boto3. Syntaxe plus stricte que JSONPath avec des fonctions intégrées. Idéal pour l'intégration dans l'écosystème AWS et les requêtes programmatiques.
Foire aux questions
JSONPath utilise-t-il l'indexation de tableau à base zéro ou à base un ?
JSONPath utilise l'indexation de tableau à base zéro, cohérente avec la plupart des langages de programmation. $[0] renvoie le premier élément, $[1] renvoie le deuxième, et ainsi de suite. Les indices négatifs comptent depuis la fin : $[-1] renvoie le dernier élément, $[-2] renvoie l'avant-dernier.
Comment fonctionnent les expressions de filtre dans JSONPath ?
Les expressions de filtre utilisent la syntaxe [?(expression)] où @ fait référence à l'élément courant évalué. Vous pouvez utiliser des opérateurs de comparaison (==, !=, <, >, <=, >=), des opérateurs logiques (&& et ||), et l'accès aux propriétés (ex. : @.name). Exemple : $[?(@.status == 'active')] renvoie les éléments où status est égal à 'active'.
Toutes les implémentations JSONPath sont-elles compatibles ?
Pas entièrement. Avant RFC 9535 (2024), JSONPath n'avait pas de standard formel et les implémentations variaient. Les différences courantes incluent la syntaxe des expressions de filtre, le comportement de la descente récursive et la gestion des propriétés manquantes. RFC 9535 vise à standardiser le comportement, mais les bibliothèques plus anciennes peuvent encore suivre des conventions différentes. Testez toujours les expressions avec votre implémentation spécifique.