← Retour au Blog

Chercheur de chemin JSON : JSONPath et techniques de navigation

Maîtrisez JSONPath pour interroger et extraire des données de structures JSON complexes. Guide complet avec exemples pratiques et outils.

Big JSON Team13 min de lectureadvanced
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

13 min de lecture

# Chercheur de chemin JSON : JSONPath et techniques de navigation

JSONPath est un langage de requête pour JSON, similaire à XPath pour XML. Ce guide vous apprend à naviguer efficacement dans les structures JSON complexes.

Qu'est-ce que JSONPath ?

JSONPath permet d'interroger des données JSON avec une syntaxe de chemin.

Syntaxe de base

\\\json

{

"store": {

"book": [

{

"category": "reference",

"author": "Nigel Rees",

"title": "Sayings of the Century",

"price": 8.95

},

{

"category": "fiction",

"author": "J. R. R. Tolkien",

"title": "The Lord of the Rings",

"price": 22.99

}

]

}

}

\\\

Opérateurs JSONPath

$ - Racine

\\\

$.store.book

// Retourne tous les livres

\\\

. - Notation point

\\\

$.store.book[0].title

// "Sayings of the Century"

\\\

[] - Notation crochet

\\\

$['store']['book'][0]['title']

// Équivalent à la notation point

\\\

- Wildcard (tous)

\\\

$.store.book[].author

// Tous les auteurs

\\\

.. - Recherche récursive

\\\

$..price

// Tous les prix partout dans le document

\\\

[start:end] - Slice

\\\

$.store.book[0:2]

// Deux premiers livres

\\\

[?(@.price < 10)] - Filtre

\\\

$.store.book[?(@.price < 10)]

// Livres moins de 10€

\\\

Exemples pratiques

Données exemple

\\\json

{

"utilisateurs": [

{

"id": 1,

"nom": "Alice",

"age": 30,

"ville": "Paris",

"actif": true

},

{

"id": 2,

"nom": "Bob",

"age": 25,

"ville": "Lyon",

"actif": false

},

{

"id": 3,

"nom": "Charlie",

"age": 35,

"ville": "Paris",

"actif": true

}

]

}

\\\

Requêtes courantes

Tous les noms :

\\\

$.utilisateurs[].nom

// ["Alice", "Bob", "Charlie"]

\\\

Utilisateurs actifs :

\\\

$.utilisateurs[?(@.actif == true)]

\\\

Utilisateurs > 30 ans :

\\\

$.utilisateurs[?(@.age > 30)]

\\\

Utilisateurs de Paris :

\\\

$.utilisateurs[?(@.ville == 'Paris')]

\\\

Implémentation JavaScript

Avec jsonpath-plus

\\\javascript

// npm install jsonpath-plus

import {JSONPath} from 'jsonpath-plus';

const data = {

utilisateurs: [

{nom: "Alice", age: 30, actif: true},

{nom: "Bob", age: 25, actif: false},

{nom: "Charlie", age: 35, actif: true}

]

};

// Tous les noms

const noms = JSONPath({path: '$.utilisateurs[].nom', json: data});

console.log(noms); // ["Alice", "Bob", "Charlie"]

// Utilisateurs actifs

const actifs = JSONPath({

path: '$.utilisateurs[?(@.actif == true)]',

json: data

});

// Avec filtre âge

const seniors = JSONPath({

path: '$.utilisateurs[?(@.age > 30)]',

json: data

});

\\\

Implémentation Python

Avec jsonpath-ng

\\\python

# pip install jsonpath-ng

from jsonpath_ng import jsonpath, parse

data = {

"utilisateurs": [

{"nom": "Alice", "age": 30, "actif": True},

{"nom": "Bob", "age": 25, "actif": False},

{"nom": "Charlie", "age": 35, "actif": True}

]

}

# Parser le chemin

jsonpath_expr = parse('$.utilisateurs[].nom')

# Extraire les valeurs

noms = [match.value for match in jsonpath_expr.find(data)]

print(noms) # ['Alice', 'Bob', 'Charlie']

\\\

Outils en ligne

JSONPath Online Evaluator

  • URL : jsonpath.com
  • Tester expressions JSONPath
  • Visualisation résultats

JSONPath Finder

  • URL : jsonpathfinder.com
  • Cliquer pour obtenir le chemin
  • Support multi-syntaxes

Expressions avancées

Opérateurs de comparaison

\\\

== Égal

!= Différent

< Inférieur

<= Inférieur ou égal

Supérieur

>= Supérieur ou égal

\\\

Opérateurs logiques

\\\

&& ET logique

|| OU logique

\\\

Exemples complexes

\\\

// Utilisateurs actifs ET > 25 ans

$.utilisateurs[?(@.actif == true && @.age > 25)]

// Paris OU Lyon

$.utilisateurs[?(@.ville == 'Paris' || @.ville == 'Lyon')]

// Nom commence par 'A'

$.utilisateurs[?(@.nom =~ /^A/)]

\\\

Fonctions JSONPath

length()

\\\

$.utilisateurs.length()

// Nombre d'utilisateurs

\\\

min() / max()

\\\

$.utilisateurs[].age.min()

$.utilisateurs[*].age.max()

\\\

Cas d'usage pratiques

API Response Navigation

\\\javascript

const response = {

status: "success",

data: {

users: [

{id: 1, profile: {name: "Alice"}},

{id: 2, profile: {name: "Bob"}}

]

}

};

// Extraire tous les noms

const names = JSONPath({

path: '$..profile.name',

json: response

});

// ["Alice", "Bob"]

\\\

Configuration Extraction

\\\javascript

const config = {

environments: {

dev: {database: {host: "localhost"}},

prod: {database: {host: "prod.server.com"}}

}

};

// Host de production

const prodHost = JSONPath({

path: '$.environments.prod.database.host',

json: config

});

\\\

Comparaison avec alternatives

Lodash get

\\\javascript

import _ from 'lodash';

// Lodash

_.get(data, 'users[0].name');

// JSONPath

JSONPath({path: '$.users[0].name', json: data});

\\\

Dot notation native

\\\javascript

// Native (simple)

data.users[0].name

// JSONPath (puissant)

$.users[?(@.age > 30)].name

\\\

Meilleures pratiques

  • Utiliser $ pour racine explicitement
  • Préférer notation point quand simple
  • Filtres pour requêtes complexes
  • Tester expressions avant utilisation
  • Documenter chemins complexes
  • Performance

    Pour gros JSON :
    • Éviter .. (recherche récursive)
    • Chemins spécifiques plutôt que wildcards
    • Considérer indexation si répétitif

    Conclusion

    JSONPath est essentiel pour :

    • Navigation JSON complexe
    • Extraction de données
    • Requêtes dynamiques
    • API data processing

    Points clés :
    • Syntaxe puissante et flexible
    • Support multi-langages
    • Filtrage et recherche avancés
    • Outils en ligne disponibles

    Maîtrisez JSONPath pour interroger JSON efficacement !

    Share:

    Articles Connexes

    Read in English