Pour lire un JSON dans n8n, repère le champ dans la sortie du nœud, glisse-le dans la case du nœud suivant et n8n écrit l'expression pour toi, du type {{ $json.usage.total_tokens }}. Ce qui compte est de comprendre le chemin que cette expression suit. Il suffit pour cela de connaître quatre briques.
Qu'est-ce que le JSON ?
Le JSON est le format dans lequel presque toutes les API, n8n et les agents échangent des données. Quand tu appelles une IA par son API, la réponse arrive en JSON, souvent enfouie au milieu d'un gros bloc d'accolades. Tu n'as pas besoin d'en écrire beaucoup. Tu as besoin de le lire et d'aller chercher une information dedans, comme on lit une adresse : pays, ville, rue, numéro.
Quelles sont les quatre briques du JSON ?
Tout JSON est construit avec quatre briques seulement.
| Brique | À quoi ça ressemble | Ce que c'est |
|---|---|---|
| Valeur simple | "devis", 44, true, null | Un texte (entre guillemets), un nombre, vrai ou faux, ou vide |
| Objet | { ... } | Une fiche dont chaque information a une étiquette |
| Tableau | [ ... ] | Une liste ordonnée, numérotée à partir de 0 |
| Imbrication | un objet dans un tableau dans un objet | Les briques se rangent les unes dans les autres |
Voici une réponse d'IA typique, avec des valeurs d'exemple :
{
"model": "google/gemini-2.5-flash",
"choices": [
{
"index": 0,
"finish_reason": "stop",
"message": {
"role": "assistant",
"content": " Devis\n"
}
}
],
"usage": {
"prompt_tokens": 42,
"completion_tokens": 2,
"total_tokens": 44
}
}
Comment lire un chemin dans un JSON ?
Tu écris le chemin de l'extérieur vers l'intérieur. Un point entre dans un objet. Des crochets avec un numéro choisissent un élément d'un tableau. Tu enchaînes autant que nécessaire.
| Ce que tu veux | Le chemin | La valeur |
|---|---|---|
| Le nom du modèle | model | "google/gemini-2.5-flash" |
| Le nombre total de jetons | usage.total_tokens | 44 |
| La raison de fin | choices[0].finish_reason | "stop" |
| La réponse de l'IA | choices[0].message.content | " Devis\n" |
Le piège numéro un : les tableaux commencent à 0, pas à 1. Ici choices[1] n'existe pas et te renvoie une valeur vide.
Remarque aussi que la réponse n'est pas propre : " Devis\n" a une espace au début, une majuscule et un retour à la ligne (\n) à la fin. Si tu la compares telle quelle avec "devis", ça ne correspondra pas. On la nettoie plus bas.
Comment n8n voit-il les données ?
Dans n8n, ce qui circule d'un nœud à l'autre est une liste d'éléments (des items), et chaque item est un objet. La documentation de n8n sur la structure des données l'écrit ainsi : toutes les données passées entre les nœuds forment un tableau d'objets. Concrètement :
- une requête qui renvoie une réponse produit 1 item ;
- une ligne de tableur lue produit 1 item, dix lignes en produisent 10 ;
- chaque nœud traite chaque item, un par un, sans que tu écrives de boucle.
Le panneau de sortie d'un nœud propose trois vues, entre lesquelles tu peux basculer :
| Vue | Utilité |
|---|---|
| Table | Une ligne par item, pratique pour vérifier |
| JSON | Le texte brut, pour lire les chemins |
| Schema | L'arbre des champs, pour glisser-déposer |
Comment écrire une expression n8n ?
Une expression est un petit morceau de code entre doubles accolades, {{ ... }}, que n8n remplace par une valeur au moment de l'exécution. La documentation des expressions la décrit comme du code de type JavaScript placé dans les paramètres d'un nœud. N'importe quel champ de nœud peut en contenir une.
La plus importante est celle-ci :
{{ $json.usage.total_tokens }}
$json désigne l'item qui arrive dans le nœud. Tu écris ensuite le chemin appris plus haut. Le geste qui fait gagner du temps : dans le panneau de gauche (l'entrée du nœud), en vue Schema, glisse un champ dans la case de droite. n8n écrit l'expression pour toi. Regarde ensuite l'aperçu sous la case : il affiche la valeur obtenue. S'il est vide ou rouge, le chemin est faux.
Comment aller chercher une valeur dans un nœud plus ancien ?
$json ne voit que le nœud juste avant. Pour remonter, nomme le nœud :
{{ $('Formulaire reçu').item.json.email }}
C'est utile quand, après le classement par l'IA, tu as encore besoin de l'e-mail venu du formulaire. D'où une règle simple : donne des noms clairs à tes nœuds, ils servent d'adresses.
Comment nettoyer une valeur ?
Une expression peut aussi transformer la valeur. Voici les transformations les plus utiles :
| Besoin | Expression | Résultat |
|---|---|---|
| Enlever les espaces et retours à la ligne autour | {{ $json.choices[0].message.content.trim() }} | "Devis" |
| Tout mettre en minuscules | {{ $json.choices[0].message.content.trim().toLowerCase() }} | "devis" |
| Tester une égalité | {{ $json.choices[0].finish_reason === 'stop' }} | true |
| Valeur par défaut si le champ est vide | {{ $json.telephone ?? 'non renseigné' }} | "non renseigné" |
| Ne pas planter si un niveau manque | {{ $json.client?.adresse?.ville }} | vide au lieu d'une erreur |
| Transformer un texte en nombre | {{ Number($json.montant) }} | 120 au lieu de "120" |
Tu peux enchaîner les transformations avec des points, de gauche à droite : d'abord trim(), puis toLowerCase().
Que faire quand la réponse de l'IA est un JSON rangé dans du texte ?
Quand tu demandes à une IA de répondre en JSON, ce JSON arrive souvent sous forme de texte dans le champ content. Pour atteindre une clé, transforme d'abord ce texte en vrai JSON avec JSON.parse :
{{ JSON.parse($json.choices[0].message.content).categorie }}
Si l'IA a répondu autre chose qu'un JSON valide, JSON.parse provoque une erreur et le nœud s'arrête. C'est voulu : un arrêt visible vaut mieux qu'une erreur silencieuse. Pour écrire un prompt qui produit ce JSON de façon fiable, lis le prompt de production.
Comment fabriquer une fiche propre avec Edit Fields (Set) ?
Le nœud Edit Fields (Set) construit une petite fiche à partir d'une grosse réponse :
- Choisis le mode Manual Mapping.
- Pour chaque champ, donne un nom (que tu choisis), un type (String, Number ou Boolean) et une valeur (une expression).
- Garde le réglage par défaut : seuls les champs que tu as définis sortent du nœud.
Donne des noms courts, en minuscules, sans espaces ni accents (categorie, jetons_total). Ils deviendront des en-têtes de colonnes si tu écris ensuite dans Google Sheets.
Questions fréquentes
Pourquoi mon expression n8n renvoie-t-elle une valeur vide ?
Le plus souvent, le chemin est faux : une faute de frappe, un tableau lu avec [1] au lieu de [0], ou un niveau manquant. Regarde l'aperçu sous la case et compare avec la vue JSON de l'entrée du nœud.
Quelle est la différence entre $json et $('Nom du nœud') ?
$json lit l'item qui entre dans le nœud actuel, donc celui du nœud juste avant. $('Nom du nœud') va chercher la donnée d'un nœud précédent précis, d'où l'intérêt de nommer clairement tes nœuds.
Faut-il savoir programmer pour utiliser les expressions ?
Non. Tu copies des modèles courts et tu changes le chemin. Le glisser-déposer écrit la plupart des expressions à ta place.
Que veut dire ?. dans une expression ?
C'est un accès prudent : $json.client?.adresse?.ville ne provoque pas d'erreur si client ou adresse n'existe pas, il renvoie une valeur vide. Le module sur les données du niveau 1 en fait un exercice à partir d'une vraie réponse d'IA.