JSONPath ou JSON Pointer
L’essentiel : JSON Pointer est une adresse unique que vous pouvez stocker comme clé ; JSONPath est un langage de requête. Utiliser le mauvais casse les mises à jour de configuration ou réinvente un JSONPath bancal.

L'essentiel : utilisez JSON Pointer quand il faut lire, écrire ou stocker l'adresse d'un nœud unique (par exemple /server/cors/0), et JSONPath quand il faut sélectionner un ensemble de nœuds par condition ; tout chemin persisté devrait être un Pointer, jamais une expression.
Demandez-vous si vous avez besoin d'un nœud ou d'un ensemble.
En un tableau
| JSON Pointer | JSONPath | |
|---|---|---|
| Nature | Adresse unique | Expression de requête |
| Syntaxe | /a/b/0 |
$.a.b[0], $..price |
| Résultat | Exactement un nœud, ou aucun | Zéro ou plusieurs nœuds |
| Stockable comme clé | Oui, la chaîne est l'identité | Non, peut correspondre à plusieurs |
| Norme | RFC 6901 | RFC 9535 (finalisée en 2024) |
JSON Pointer
/server/host -> "127.0.0.1"
/server/cors/0 -> "https://a.com"
/ -> the whole document
Les clés contenant / ou ~ sont échappées : ~0 pour ~, ~1 pour /. La valeur est le déterminisme : l'adresse est une chaîne, donc elle tient dans une colonne de base de données, une ligne de journal ou une clé de configuration. JSON Patch (RFC 6902) adresse chaque opération de cette façon.
JSONPath
$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]
Plus proche du WHERE de SQL. La même expression renvoie zéro, un ou cent nœuds selon les données.
Deux modes d'échec
Utiliser JSONPath comme clé de configuration. Stockez $.server.port et un jour la structure devient un tableau ; l'expression correspond maintenant à plusieurs ports et la logique de mise à jour n'a aucun moyen de choisir.
Utiliser Pointer pour la sélection. « Trouver chaque nœud dont le prix est inférieur à 10 » est impossible avec un pointeur. Écrire la boucle soi-même signifie construire un JSONPath partiel.
Comment les vrais systèmes répartissent le travail
- Lectures de configuration, mises à jour de champs, patchs : Pointer, fixe et auditable
- Exploration de données, extraction en masse, reporting : JSONPath, expressivité d'abord
- Tout ce qui est persisté : Pointer seulement, jamais une expression
FAQ
Comment choisir entre JSON Pointer et JSONPath ?
Demandez-vous si vous avez besoin d'un nœud ou d'un ensemble. Utilisez JSON Pointer pour lire ou écrire un nœud précis et stocker cette adresse comme clé, car le pointeur est unique, par exemple /server/cors/0. Utilisez JSONPath pour sélectionner des nœuds par condition, par exemple $.store.book[?(@.price < 10)].
Pourquoi une expression JSONPath ne peut-elle pas servir de clé de configuration ?
Parce que l'expression peut correspondre à plusieurs nœuds. Stockez $.server.port et un jour la structure devient un tableau ; l'expression correspond alors à plusieurs ports et la logique de mise à jour ne peut pas décider lequel changer. Tout ce qui est persisté ou audité a besoin d'un Pointer.
JSON Pointer peut-il filtrer des nœuds par condition ?
Non. Un pointeur ne parcourt qu'un chemin fixe et n'a aucun moyen de savoir quels nœuds existent, donc sélectionner chaque nœud dont le prix est inférieur à 10 est impossible. Écrire cette boucle soi-même signifie construire un JSONPath partiel.