Interrogez du JSON avec des expressions de type JSONPath
Extrayez des valeurs d’un document de données avec un chemin court : $.store.books[*].title renvoie North et South, un titre par livre, dans leur ordre d’apparition. Un chemin sans résultat donne une liste vide, pas une erreur. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Chemin
- $.store.books[*].title
- Correspondances
- North, South
La syntaxe reconnue couvre les propriétés directes, les propriétés entre guillemets, les indices de tableaux et les jokers, tout en refusant volontairement les filtres, la descente récursive, les tranches, les unions et les expressions exécutables. Ce contrat restreint garantit des résultats prévisibles pour le débogage, les tests, l’inspection de données et les automatisations légères.
Construisez un chemin depuis le début du document
Chaque expression commence par <code>$</code>, qui représente la totalité du document analysé. Ajoutez un point suivi d’un nom de propriété simple, comme <code>$.customer.name</code>, pour parcourir des objets. En notation pointée, le nom doit commencer par une lettre ou un trait de soulignement, puis peut contenir des lettres, des chiffres ou des traits de soulignement.
Si une clé contient une espace, un tiret, un point ou un autre caractère exclu par cette règle, employez une étape entre crochets et guillemets, par exemple <code>$['display-name']</code> ou <code>$["shipping address"]</code>. Les guillemets simples et doubles sont acceptés, et vous pouvez échapper le guillemet correspondant ou une barre oblique inverse. Les chemins sont évalués de gauche à droite ; une propriété absente ne fournit aucune valeur pour la branche concernée.
La réponse contient toujours un tableau <code>matches</code>, même si le chemin désigne un seul scalaire, afin que vous traitiez de la même façon résultat unique, joker et absence de résultat.
Sélectionnez les éléments et développez les jokers
Placez un entier positif ou nul entre crochets pour sélectionner une position d’un tableau, par exemple <code>$.orders[0].id</code>. Les indices commencent à zéro : le premier élément porte donc l’indice zéro, et une position au-delà de la longueur ne produit aucun résultat. Utilisez <code>[*]</code> pour développer tous les éléments, puis poursuivez le chemin afin de lire un champ dans chacun d’eux.
Ainsi, <code>$.store.books[*].title</code> renvoie le titre de chaque objet livre possédant cette propriété. La forme pointée <code>.*</code> est également reconnue. Vous pouvez combiner un joker avec des étapes de propriété ou d’indice ultérieures.
Les branches sans correspondance sont écartées sans affecter les autres. L’ordre final suit donc le document source et le parcours.
Repérez la syntaxe volontairement non prise en charge
Cette capacité fournit un petit langage de type JSONPath, et non l’ensemble des dialectes existants. Elle refuse la descente récursive comme <code>$..name</code>, les filtres comme <code>$[?( @.price < 10)]</code>, les tranches, les unions, les indices négatifs, les scripts et les fonctions.
Ce choix est volontaire : ces fonctions varient selon les bibliothèques et certaines autorisent une évaluation incompatible avec un analyseur déterministe. En revanche, un chemin syntaxiquement valide qui ne trouve rien ne constitue pas une erreur : il renvoie un tableau <code>matches</code> vide. Votre automatisation peut ainsi distinguer une instruction mal formée d’une requête valide portant sur une donnée facultative absente.
Pour une intégration fiable, validez vos chemins pendant le développement, respectez le sous-ensemble documenté et déterminez si un résultat vide convient à votre traitement.
Questions fréquentes
Quelles fonctions JSONPath sont-elles reconnues ?
Le sous-ensemble comprend le symbole racine, les propriétés pointées, les propriétés entre crochets et guillemets, les indices positifs ou nuls et les jokers.
Que se passe-t-il si le chemin ne trouve rien ?
La requête réussit et renvoie un tableau matches vide. Une donnée absente ne correspond pas à une syntaxe de chemin incorrecte.
Puis-je utiliser des filtres ou la descente récursive ?
Non. Les filtres, la descente récursive, les tranches, les unions, les scripts, les fonctions et les indices négatifs sont refusés.
Comment lire une clé contenant un espace ou un tiret ?
Mettez le nom entre guillemets dans des crochets, par exemple $['display-name'] ou $["shipping address"]. Le point simple ne convient qu’aux noms qui commencent par une lettre ou un tiret bas et ne contiennent que lettres, chiffres ou tirets bas.
Les positions d’une liste commencent-elles à 0 ou à 1 ?
À 0 : $.orders[0].id lit la première commande. Une position au-delà de la fin de la liste ne donne aucun résultat, sans provoquer d’erreur, et les positions négatives sont refusées.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev2/json-path-query \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}'const res = await fetch("https://api.kit.forhosting.com/dev2/json-path-query", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev2/json-path-query",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev2/json-path-query", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"json":"{\\"store\\":{\\"books\\":[{\\"title\\":\\"North\\",\\"price\\":12},{\\"title\\":\\"South\\",\\"price\\":18}]}}","path":"$.store.books[*].title"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"json":"{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}","path":"$.store.books[*].title"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev2/json-path-query", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"json": "{\"store\":{\"books\":[{\"title\":\"North\",\"price\":12},{\"title\":\"South\",\"price\":18}]}}",
"path": "$.store.books[*].title"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev2.json_path_query",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Cet outil de requête de type JSONPath extrait des valeurs d’un document JSON sans vous demander d’écrire un script, d’installer une dépendance ou de préparer une ligne de commande. Collez un JSON valide, saisissez un chemin commençant par le symbole racine et obtenez une liste ordonnée de résultats.
Construisez un chemin depuis la racine JSON
L’expression racine seule est valide et renvoie toute la valeur JSON comme résultat unique.
Sélectionnez les éléments et développez les jokers
Sur un objet, un joker visite les valeurs selon l’ordre standard des propriétés JSON ; sur un tableau, il parcourt les éléments du premier au dernier. Les valeurs conservent leur type JSON natif : chaînes, nombres, objets, tableaux, booléens et valeurs nulles sont renvoyés sans conversion.
Repérez la syntaxe volontairement non prise en charge
Une expression non reconnue renvoie une erreur <code>invalid_input</code> accompagnée d’un message qui localise le problème ; elle n’est jamais interprétée comme un chemin partiellement valide. Un JSON incorrect est refusé séparément avant tout parcours. Le tarif de l’API commence à $0.002 par requête, avec la même logique déterministe dans le navigateur.
Cas d'intégration
Inspecter une réponse d’API
Extrayez un état, un identifiant ou une liste de valeurs profondément imbriquée pendant le débogage d’une réponse.
Créer des assertions de test stables
Sélectionnez uniquement les champs utiles à un test de régression au lieu de comparer tout un document évolutif.
Préparer une automatisation légère
Récupérez des valeurs dans un JSON de configuration, de webhook ou d’export avant l’étape déterministe suivante.
Questions techniques
Les valeurs trouvées sont-elles converties en texte ?
Non. Elles conservent leur type JSON, notamment nombre, booléen, valeur nulle, objet ou tableau.
Combien coûte une requête d’API ?
Le tarif de l’API commence à $0.002 par requête. Cette capacité peut aussi être exécutée gratuitement dans le navigateur.