- JSON Path est un langage de requête qui permet d’extraire des données d’un document JSON
- Comme OpenAPI est un document JSON ou YAML, JSON Path permet d’effectuer diverses opérations sur OpenAPI
- Utiliser OpenAPI Overlay pour appliquer des correctifs au document, ajouter du contenu, des exemples de code, etc.
- L’utiliser dans Spectral pour écrire des règles avancées
- L’utiliser aussi dans AWS Step Functions
- Fonctionnement de JSON Path
- Il permet de parcourir et filtrer la structure de données JSON, puis d’en extraire des parties spécifiques
- Sa syntaxe est similaire à XPath (utilisé avec XML)
- Exemple de syntaxe :
$.store.book[?@.price < 10].title
- Utilisation dans OpenAPI
- La commande
jpp permet d’interroger un document OpenAPI et d’en extraire des parties spécifiques
- On peut utiliser Overlay pour modifier un document OpenAPI ou y ajouter des informations
- Mettre à jour des descriptions, ajouter des coordonnées de contact, etc.
- Supprimer les serveurs de développement/préproduction de la liste des serveurs pour ne conserver que la production
- Ajouter les informations d’un nouveau serveur sandbox, etc.
- Pour en apprendre davantage sur JSON Path
- Il a été normalisé par l’IETF en 2024 (RFC 9535)
- Il existait auparavant plusieurs variantes, mais la normalisation tend à unifier l’ensemble
- Il est recommandé de suivre la syntaxe du RFC 9535
L’avis de GN⁺
- JSON Path est utilisé dans un nombre croissant d’endroits, ce qui en fait une compétence utile à connaître. Cela devrait devenir une compétence incontournable, notamment pour les développeurs et rédacteurs techniques qui travaillent avec OpenAPI.
- La syntaxe de JSON Path n’est pas encore totalement unifiée, ce qui crée un peu de confusion, mais il semble préférable de se baser sur le RFC 9535. On peut s’attendre à ce que les outils associés s’alignent progressivement sur cette norme.
- Les domaines d’application dans le processus de développement, comme OpenAPI Overlay ou Spectral, semblent variés. Le potentiel ne se limite pas à l’extraction de données, mais s’étend aussi à l’enrichissement documentaire, la validation et l’assainissement.
- La syntaxe reste toutefois un peu complexe et demande une certaine familiarité avec JSON/YAML, ce qui crée une barrière à l’entrée. Mieux vaut commencer simplement puis apprendre progressivement les fonctionnalités avancées.
- Des outils en ligne de commande comme jq ou yq semblent bien adaptés pour s’exercer. Utiliser un outil intégré comme Bump.sh peut aussi aider à gagner en productivité.
2 commentaires
Merci.
Commentaires sur Hacker News
JSONata(https://jsonata.org) est l’un des meilleurs outils pour manipuler du JSON, utilise une syntaxe JsonPath et fournit, au-delà de la sélection de nœuds, des fonctions utilitaires pour l’arithmétique, les comparaisons, le tri, le regroupement, la manipulation de dates et les agrégations. Écrit en JS, il peut être utilisé dans Node ou dans le navigateur, et dispose aussi d’un wrapper Python (https://pypi.org/project/pyjsonata/).
json_profile(https://github.com/tylerneylon/json_profile) est un outil qui aide à comprendre rapidement le schéma principal et l’emplacement des données dans de nouveaux fichiers JSON, particulièrement utile lorsque les éléments pairs d’une liste ont la même structure. Il apprend la structure du fichier, affiche les chemins d’agrégation les plus lourds et fournit des indications de taille par chemin.
espath(https://github.com/tomhodgins/espath) est une bibliothèque permettant de filtrer et de trouver des données dans du JSON à l’aide de sélecteurs XPath et CSS. Elle fonctionne en convertissant les objets JavaScript en XML DOM, en exécutant les requêtes puis en reconvertissant le résultat en objets, ou en conservant un registre des objets d’origine pour retrouver les objets sources.
Un commentaire demande s’il existe un nom générique pour le type de structure de données représenté par JSON, et évoque le besoin d’un langage de chemins fonctionnant sur des structures similaires comme JSON, YAML, les dictionnaires Python ou TOML.
SQLite inclut dans le cœur de la base de données un sous-ensemble de JSON Path utilisé dans des fonctions comme json_extract(). Note détaillée associée : https://til.simonwillison.net/sqlite/json-extract-path
Insomnia et Bruno proposent des fonctionnalités pour filtrer les réponses avec JSON Path.
Un utilisateur dit avoir utilisé la prise en charge de jsonpath dans PostgreSQL pour créer des règles de filtrage personnalisées sur des lignes de base de données.
De la même manière que les attaques par injection XPath ont été largement utilisées, on s’attend à ce que les attaques par injection de chemin JSON deviennent inévitables. (voir https://owasp.org/www-community/attacks/XPATH_Injection)
L’absence de mention d’outils similaires comme jq semble étonnante.
Il est regrettable qu’il existe trop de syntaxes de chemins JSON. jq, JSON path, AWS CLI, MySQL, etc. utilisent chacun une syntaxe différente, ce qui rend difficile l’acquisition d’une mémoire musculaire.