Guide de requête JSONPath : Extraire précisément les données imbriquées du JSON

JSON

Qu'est-ce que JSONPath

JSONPath est un langage de requête pour JSON, similaire à XPath pour XML, qui extrait précisément les données d'un JSON imbriqué complexe :

{
  "store": {
    "books": [
      {"title": "The Three-Body Problem", "price": 68},
      {"title": "To Live", "price": 45},
      {"title": "One Hundred Years of Solitude", "price": 55}
    ]
  }
}

Utilisez $.store.books[*].title pour extraire tous les titres : ["The Three-Body Problem", "To Live", "One Hundred Years of Solitude"]


Référence de syntaxe de base

Syntaxe Signification Exemple
$ Nœud racine $
. Nœud enfant $.store
[] Index de tableau ou nœud enfant $[0], $['key']
* Caractère générique, tous les éléments $.store.*
.. Descente récursive, tous les niveaux $..title
[start:end] Tranche de tableau $[0:2]
[?(expr)] Expression de filtre $[?(@.price > 50)]

Syntaxe expliquée en détail

Nœud racine $

$ représente la racine JSON. Tous les chemins commencent par $ :

$           → Tout le JSON
$.store     → L'objet store

Accès aux nœuds enfants .

Utilisez . ou [] pour accéder aux nœuds enfants :

$.store.books        → Le tableau books
$.store['books']     → Forme équivalente ; requise lorsque les noms de clés contiennent des caractères spéciaux

Index de tableau []

$.store.books[0]     → Premier livre
$.store.books[-1]    → Dernier livre
$.store.books[0:2]   → Deux premiers livres (tranche)

Caractère générique *

$.store.books[*]           → Tous les livres
$.store.books[*].title     → Tous les titres

Descente récursive ..

.. recherche à tous les niveaux sans avoir besoin du chemin complet :

$..title     → Tous les champs title à n'importe quel niveau
$..price     → Tous les champs price à n'importe quel niveau

.. est particulièrement utile dans les réponses d'API profondément imbriquées.


Expressions de filtre ?()

Le filtrage est la fonctionnalité la plus puissante de JSONPath :

Opérateurs de comparaison

Opérateur Signification Exemple
== Égal à $[?(@.price == 45)]
!= Différent de $[?(@.price != 45)]
> Supérieur à $[?(@.price > 50)]
< Inférieur à $[?(@.price < 50)]
>= Supérieur ou égal à $[?(@.price >= 55)]

Opérateurs logiques

$[?(@.price > 50 && @.price < 70)]    → Prix entre 50 et 70
$[?(@.category == 'fiction' || @.price < 40)]    → Fiction ou prix inférieur à 40

Correspondance de chaînes

$[?(@.title =~ /Three.*/)]    → Titre commençant par « Three »

Utilisation de l'outil JSONPath

Étape 1 : Ouvrir l'outil

Visitez l'outil JSONPath pour accéder à l'interface de requête.

Étape 2 : Saisir les données JSON

Collez votre réponse d'API ou vos données JSON dans la zone de saisie. Vous pouvez d'abord les embellir avec le Formateur JSON.

Étape 3 : Écrire une expression JSONPath

Entrez une expression dans la zone de requête, ex. $.data.users[*].name.

Étape 4 : Voir les résultats d'extraction

L'outil affiche les résultats correspondants en temps réel et met en surbrillance les nœuds correspondants dans la source.


Pratique : Extraction de données à partir de réponses d'API

Exemple d'API GitHub

{
  "items": [
    {"full_name": "vuejs/vue", "stargazers_count": 45000, "language": "TypeScript"},
    {"full_name": "facebook/react", "stargazers_count": 42000, "language": "JavaScript"}
  ]
}
$.items[*].full_name              → Tous les noms de dépôts
$.items[?(@.stargazers_count > 43000)].full_name  → Noms de dépôts avec Stars > 43000

Extraction de données paginées

$.data.list[*].id                 → Tous les IDs sur la page actuelle
$.pagination.next_cursor          → Curseur de la page suivante

JSONPath vs JMESPath

Comparaison JSONPath JMESPath
Style de syntaxe Type XPath Type SQL/pipe
Recherche récursive .. supporté nativement Requiert une traversée explicite
Syntaxe de filtre [?(@.x > 1)] [?x > 1]
Projection/transformation Non supporté Supporte [*].{n: name}
Tri des résultats multiples Non garanti Peut trier
Outil JSONPath JMESPath

Utilisez JSONPath pour l'extraction simple, JMESPath pour la transformation/projection.


Problèmes courants

Problème Cause Solution
La requête renvoie vide Faute de frappe dans le chemin Vérifier la casse des noms de clés
Le filtre ne fonctionne pas Différence de version de syntaxe Confirmer la version de syntaxe supportée par l'outil
Index de tableau hors limites L'index dépasse la plage Utiliser [*] ou vérifier la longueur du tableau
Trop de résultats récursifs .. a correspondu à tous les niveaux Réduire la portée ou ajouter des conditions de filtre
Erreur de clé avec caractères spéciaux La clé contient . ou - Utiliser la syntaxe à crochets ['key.name']

Résumé

JSONPath est un outil puissant pour travailler avec les données JSON. Maîtrisez les six éléments de syntaxe de base — $, ., [], *, .., ?() — et vous pourrez extraire précisément les données de n'importe quel JSON imbriqué. L'outil JSONPath fournit des requêtes en temps réel avec positionnement en surbrillance, tandis que JMESPath et le Formateur JSON complètent votre flux de traitement des données JSON.

#JSONPath#数据查询#嵌套#过滤#提取