Skip to main content

Welcome to a Grasp lesson

Create a free account to keep studying and create your own study path.

Lesson 14

Manipulation de données avec JavaScript

Recommended resources

Bonjour !

Dans la leçon précédente, nous avons découvert les bases des expressions n8n : comment elles nous permettent de lire et de référencer des données ($json.propriete) à l'intérieur de nos workflows. Nous avons vu que c'était la première étape pour rendre nos automatisations dynamiques.

Aujourd'hui, nous passons à la vitesse supérieure. Savoir lire une donnée, c'est bien, mais savoir la transformer, c'est ce qui débloque la véritable puissance de n8n. L'objectif de cette leçon est de vous apprendre à utiliser les méthodes JavaScript intégrées dans les expressions pour manipuler les chaînes de caractères, les nombres et les dates.

Vous verrez comment nettoyer un nom de produit mal formaté, calculer un prix TTC à partir d'un prix hors taxe, ou encore formater une date pour l'insérer dans un email. Ces compétences sont essentielles et vous les utiliserez dans presque tous vos workflows.

1. Manipulation des Chaînes de Caractères (Strings)

Les chaînes de caractères sont omniprésentes. Elles proviennent d'APIs, de formulaires, de webhooks, et sont rarement dans le format exact dont on a besoin. Heureusement, JavaScript offre une panoplie de méthodes pour les "sculpter".

La vidéo suivante, bien qu'en anglais, est une ressource exhaustive qui démontre visuellement chaque fonction. Pour votre profil technique, suivre les manipulations à l'écran sera très intuitif.

Every N8N JavaScript Function Explained (106 + 7 Extras)

Cette vidéo de Nick Saraev est un catalogue complet des fonctions disponibles dans n8n. Nous allons nous concentrer sur la section dédiée aux chaînes de caractères pour voir en action les méthodes les plus utiles.

Regardez des extraits de cette section (durée totale ~50 min, mais concentrez-vous sur les méthodes clés). Utilisez la barre de progression pour naviguer. split() (0:04:30) : Sûrement la plus utile. Pour diviser une chaîne en plusieurs parties. replace() / replaceAll() (0:10:45 et 0:29:40) : Pour rechercher et remplacer du texte. trim() (0:34:00) : Essentiel pour nettoyer les espaces superflus au début et à la fin. toUpperCase() / toLowerCase() (0:52:15) : Pour changer la casse. includes() (0:03:30) : Pour vérifier si une chaîne contient un certain texte. slice() / substring() (0:31:30) : Pour extraire une partie d'une chaîne.

Méthodes Essentielles et Exemples

Voici un résumé des méthodes que vous utiliserez le plus souvent :

Méthode Description Exemple d'Expression
trim() Supprime les espaces au début et à la fin. {{ " Bonjour ".trim() }} → "Bonjour"
toUpperCase() Met toute la chaîne en majuscules. {{ "texte".toUpperCase() }} → "TEXTE"
toLowerCase() Met toute la chaîne en minuscules. {{ "TEXTE".toLowerCase() }} → "texte"
split(separator) Divise la chaîne en un tableau de sous-chaînes. {{ "Jean-Dupont".split('-') }} → ["Jean", "Dupont"]
replace(search, new) Remplace la première occurrence d'une chaîne. {{ "a-b-c".replace('-', '_') }} → "a_b-c"
replaceAll(search, new) Remplace toutes les occurrences d'une chaîne. {{ "a-b-c".replaceAll('-', '_') }} → "a_b_c"
includes(search) Renvoie true si la chaîne contient la sous-chaîne. {{ "Facture #123".includes('#') }} → true
substring(start, end) Extrait une partie de la chaîne entre deux indices. {{ "REF-45678".substring(4) }} → "45678"

L'une des grandes forces des expressions est de pouvoir chaîner les méthodes pour effectuer des transformations complexes en une seule ligne.

n8n Edit Fields Node with JavaScript Expression Example
Ici, la méthode `split('T')[0]` est utilisée pour extraire la partie date d'une chaîne de caractères date-heure complète (format ISO). C'est un parfait exemple de chaînage : `split()` retourne un tableau, et `[0]` accède au premier élément de ce tableau.

Mini-Exercice : Nettoyer un Titre de Produit

Imaginons que vous receviez la donnée suivante d'un fournisseur : {"produit": " ORDINATEUR PORTABLE - 15 pouces "}.
Votre objectif est d'extraire uniquement le nom du produit ("ORDINATEUR PORTABLE") et de le formater en "casse de titre" (première lettre de chaque mot en majuscule).

Indice Vous aurez besoin de chaîner `trim()`, `split()`, d'accéder à un élément du tableau, puis potentiellement de re-`trim()`er. Pour la "casse de titre", il n'y a pas de méthode directe simple, mais `toLowerCase()` suivi de `toTitleCase()` (une fonction n8n pratique) fonctionne bien : `{{ "texte en majuscules".toLowerCase().toTitleCase() }}`.
Solution
// Expression pour formater le nom du produit
{{ $json.produit.split('-')[0].trim().toLowerCase().toTitleCase() }}

Décomposition :

  1. $json.produit → " ORDINATEUR PORTABLE - 15 pouces "
  2. .split('-')[0] → " ORDINATEUR PORTABLE " (on coupe au tiret et on prend la première partie)
  3. .trim() → "ORDINATEUR PORTABLE" (on enlève les espaces restants)
  4. .toLowerCase() → "ordinateur portable"
  5. .toTitleCase() → "Ordinateur Portable"

2. Manipulation des Nombres (Numbers)

Souvent, les nombres arrivent sous forme de chaînes de caractères (ex: "1,499.99"). Pour effectuer des calculs, il est impératif de les convertir en type Number.

Retournons à notre vidéo de référence pour voir les fonctions de manipulation de nombres.

Every N8N JavaScript Function Explained (106 + 7 Extras)

Continuons avec la même vidéo, cette fois sur la section dédiée aux nombres.

Regardez les passages concernant les fonctions suivantes : round(), floor(), ceil() (0:59:45) : Pour arrondir les nombres. format() (1:02:40) : Très utile pour formater les nombres en devise ou selon des locales. Conversion de type (to number) (0:58:32, bien que dans la section précédente, le principe est le même) : Expliqué via le concept de conversion de string en nombre.

Méthodes et Fonctions Essentielles

Méthode/Fonction Description Exemple d'Expression
Number(value) Convertit une chaîne en nombre. {{ Number("123.45") }} → 123.45
parseFloat(value) Similaire à Number, analyse une chaîne et renvoie un nombre à virgule flottante. {{ parseFloat("Prix: 99.99€") }} → 99.99
toFixed(digits) Formate un nombre en chaîne avec un nombre fixe de décimales. Très utile pour les devises. {{ (10/3).toFixed(2) }} → "3.33"
Math.round(n) Arrondit à l'entier le plus proche. {{ Math.round(4.7) }} → 5
Math.ceil(n) Arrondit à l'entier supérieur. {{ Math.ceil(4.2) }} → 5
Math.floor(n) Arrondit à l'entier inférieur. {{ Math.floor(4.7) }} → 4
JavaScript IIFE for Price Calculation in n8n
Cet exemple montre un cas d'usage parfait : une fonction JavaScript (IIFE) est utilisée pour prendre un prix, appliquer une réduction, puis utiliser `toFixed(2)` pour garantir un format monétaire correct. C'est exactement le genre de manipulation que vous serez amené à faire.

Mini-Exercice : Calculer un Prix TTC

Vous recevez une liste de produits avec des prix HT sous forme de chaîne : {"nom": "Clavier", "prix_ht": "83.33 EUR"}.
Calculez le prix TTC (avec une TVA de 20%) et formatez-le en une chaîne de caractères propre, par exemple "100.00 EUR".

Indice Vous devrez combiner des méthodes de chaînes de caractères (`split` ou `replace`) pour isoler le nombre, le convertir avec `parseFloat`, faire le calcul mathématique, puis formater le résultat avec `toFixed(2)` avant de rajouter " EUR".
Solution
// Expression pour calculer et formater le prix TTC
{{ (parseFloat($json.prix_ht) * 1.20).toFixed(2) + " EUR" }}

Décomposition :

  1. $json.prix_ht → "83.33 EUR"
  2. parseFloat(...) → 83.33 (La fonction ignore intelligemment " EUR" à la fin)
  3. * 1.20 → 99.996
  4. .toFixed(2) → "100.00" (Notez que toFixed arrondit et retourne une chaîne)
  5. + " EUR" → "100.00 EUR"

3. Manipulation des Dates

La gestion des dates est un classique de l'automatisation : planifier des rappels, calculer des délais, formater des dates pour des rapports... n8n intègre la puissante bibliothèque Luxon pour simplifier ces opérations.

Toutes les manipulations de dates commencent généralement par s'assurer que l'on travaille avec un objet DateTime. Les variables spéciales $now (maintenant) ou $today (aujourd'hui à minuit) sont déjà des objets de ce type. Si vous avez une date en format texte (ex: "2024-09-15"), vous devez la convertir avec la méthode .toDateTime().

Every N8N JavaScript Function Explained (106 + 7 Extras)

La dernière section de la vidéo de Nick Saraev est un bonus qui couvre spécifiquement Luxon, la bibliothèque de dates utilisée par n8n. C'est une introduction parfaite.

Regardez les passages suivants de cette section bonus : Introduction à Luxon et $now (dès le début à 1:47:09) toFormat() (1:48:00) : La méthode la plus importante pour afficher une date comme vous le souhaitez. plus() et minus() (1:50:20) : Pour ajouter ou soustraire du temps (jours, semaines, etc.). extract (month, year, day, etc.) (1:52:15) : Pour récupérer une partie spécifique d'une date.

Méthodes Luxon Essentielles

Une fois que vous avez un objet DateTime (par exemple, {{ $now }} ou {{ $json.ma_date.toDateTime() }}), vous pouvez utiliser ces méthodes :

Méthode Description Exemple d'Expression
toFormat(format) Formate la date en une chaîne personnalisée. {{ $now.toFormat("dd/MM/yyyy") }} → "26/09/2024"
plus({unit: amount}) Ajoute une durée. {{ $now.plus({days: 7}) }} → La date dans 7 jours.
minus({unit: amount}) Soustrait une durée. {{ $now.minus({months: 1}) }} → La date il y a 1 mois.
year, month, day Accède à un composant de la date. {{ $now.year }} → 2024
setLocale(locale) Définit la langue pour les formats (noms des mois/jours). {{ $now.setLocale('fr').toFormat("cccc dd MMMM") }} → "jeudi 26 septembre"
toISODate() Retourne la date au format YYYY-MM-DD. {{ $now.toISODate() }} → "2024-09-26"

Vous trouverez une liste des jetons de formatage (comme dd, MMMM, yyyy) dans la documentation de Luxon, qui est une ressource inestimable.

Mini-Exercice : Calculer une Date d'Échéance

Vous avez une date de facturation : {"date_facture": "2024-10-21"}. Les factures sont dues à 30 jours.
Calculez la date d'échéance et formatez-la en français (ex: "mercredi 20 novembre 2024").

Indice N'oubliez pas de convertir la chaîne de caractères en objet `DateTime` d'abord avec `.toDateTime()`. Puis utilisez `.plus()` avec `{days: 30}`. Enfin, appliquez `.setLocale('fr')` et `.toFormat()`.
Solution
// Expression pour calculer et formater la date d'échéance
{{ $json.date_facture.toDateTime().plus({days: 30}).setLocale('fr').toFormat('cccc dd MMMM yyyy') }}

Décomposition :

  1. $json.date_facture.toDateTime() → Crée un objet DateTime pour le 21 octobre 2024.
  2. .plus({days: 30}) → Ajoute 30 jours, ce qui nous amène au 20 novembre 2024.
  3. .setLocale('fr') → Indique que les noms des jours et mois doivent être en français.
  4. .toFormat('cccc dd MMMM yyyy') → Formate l'objet date en une chaîne lisible.

Conclusion

Aujourd'hui, nous avons exploré comment les expressions n8n, combinées aux méthodes JavaScript, deviennent un outil de transformation de données extrêmement puissant.

Points clés à retenir :

  • Chaînes de caractères : Utilisez trim(), split(), replace() et toLowerCase()/toUpperCase() pour nettoyer et standardiser vos données textuelles.
  • Nombres : La conversion avec Number() ou parseFloat() est cruciale avant tout calcul. toFixed() est votre meilleur ami pour la mise en forme des devises.
  • Dates : n8n s'appuie sur Luxon. La séquence toDateTime() -> (manipulation) -> toFormat() est un schéma que vous utiliserez constamment.
  • Le chaînage est la clé de l'efficacité, vous permettant d'appliquer plusieurs transformations en une seule expression concise.

Dans la prochaine leçon, nous mettrons en pratique ces compétences en nous concentrant sur les nœuds Set et Edit Fields. Nous verrons comment les utiliser pour restructurer complètement des objets JSON : renommer des clés, ajouter de nouveaux champs calculés, et supprimer ceux qui sont inutiles.