Automations 7 min

Data transformeren in n8n: Set-node, Code-node en datums

Kort antwoord

In n8n transformeer je data via de Set-node voor eenvoudige veldmapping en hernoeming, en via de Code-node voor complexe JavaScript-logica. De Set-node werkt zonder code via expressions zoals {{ $json.first_name }}. De Code-node geeft volledige controle via JavaScript en verwerkt de items-array die n8n intern gebruikt. Datumformaten zet je om via JavaScript Date-objecten of de ingebouwde luxon-bibliotheek.

n8n biedt meerdere manieren om data te hervormen: velden hernoemen, waarden combineren, datums omzetten en JavaScript schrijven voor complexe logica.

Waarom datatransformatie nodig is

APIs sturen data terug in hun eigen formaat, niet in het formaat dat jouw doelsysteem verwacht. Een CRM geeft first_name en last_name terug, maar jouw e-mailplatform verwacht voornaam en naam. Een systeem stuurt datums als 2026-07-14, een ander verwacht 14-07-2026. Zonder transformatie passen systemen niet op elkaar.

n8n heeft twee hoofdgereedschappen voor datatransformatie: de Set-node voor eenvoudige veldmapping zonder code, en de Code-node voor complexe JavaScript-logica. Meer over het opzetten van je eerste workflow lees je in het artikel over je eerste workflow maken in n8n.

De Set-node: velden hernoemen en aanpassen

De Set-node is het snelste gereedschap voor eenvoudige transformaties. Je voegt velden toe via een formulierinterface en wijst elke waarde toe via een expression.

Expressions in n8n beginnen en eindigen met dubbele accolades: {{ }}. Binnen de accolades verwijs je naar input-data via $json.veldnaam. Voorbeelden:

  • {{ $json.first_name }} geeft de waarde van het first_name-veld
  • {{ $json.first_name + ' ' + $json.last_name }} combineert twee velden
  • {{ $json.prijs * 1.21 }} berekent een prijs inclusief btw
  • {{ $json.email.toLowerCase() }} zet een e-mailadres om naar kleine letters

Zet de optie “Keep Only Set” aan als je alleen de velden wilt bewaren die je expliciet hebt gedefinieerd. Alle andere velden worden verwijderd. Dat maakt de output kleiner en voorkomt dat ongewenste velden meegaan naar het volgende systeem.

De Code-node: JavaScript voor complexe logica

De Code-node geeft volledige controle via JavaScript. Je schrijft code die de inkomende items verwerkt en getransformeerde items teruggeeft.

De basisstructuur:

return items.map(item => ({
  json: {
    voornaam: item.json.first_name,
    achternaam: item.json.last_name,
    volledigeNaam: item.json.first_name + ' ' + item.json.last_name,
    emailKlein: item.json.email.toLowerCase()
  }
}));

Gebruik de Code-node als je conditionele logica nodig hebt, waarden wilt berekenen op basis van andere waarden, of arrays wilt transformeren. De Set-node kan dit niet.

Datumformaten omzetten

Datumformaten zijn een veelvoorkomende bron van problemen bij integraties. Een paar praktische omzettingen in de Code-node:

ISO 8601 naar Nederlands formaat:

const datum = new Date(item.json.datum);
const nl = datum.toLocaleDateString('nl-NL', { day: '2-digit', month: '2-digit', year: 'numeric' });
// Geeft: 14-07-2026

Via luxon (ingebouwd in n8n):

const { DateTime } = require('luxon');
const dt = DateTime.fromISO(item.json.datum);
const geformatteerd = dt.toFormat('dd-MM-yyyy');

Excel-serienummer naar datum:

const excelDatum = (item.json.datumgetal - 25569) * 86400 * 1000;
const datum = new Date(excelDatum).toISOString().split('T')[0];

Arrays samenvoegen en filteren

In de Code-node kun je ook meerdere items samenvoegen of filteren. Wil je alleen items bewaren waarbij een veld aan een conditie voldoet:

return items.filter(item => item.json.status === 'actief');

Wil je een item met een array-veld uitklappen naar meerdere items:

return items.flatMap(item =>
  item.json.regels.map(regel => ({
    json: {
      bestelling_id: item.json.id,
      product: regel.product,
      aantal: regel.aantal
    }
  }))
);

Testen en debuggen

Test de transformatie altijd met echte data. Voer de workflow handmatig uit en klik op de node om de output te inspecteren. Bekijk of de veldnamen, datatypes en waarden kloppen. Pas de expressions of code aan totdat de output exact overeenkomt met wat het doelsysteem verwacht.

Voor complexere workflows met meerdere transformatiestappen is het zinvol om foutafhandeling in te stellen zodat je een melding krijgt als een transformatie onverwacht faalt.

Onze tip: gebruik de Code-node met de “Run Once for All Items”-instelling als je alle items in één keer wilt verwerken, en de standaardinstelling “Run Once for Each Item” als je elk item afzonderlijk verwerkt. De eerste optie geeft toegang tot alle items tegelijk (handig voor aggregaties), de tweede is eenvoudiger voor per-item-transformaties.

Veelgestelde vragen

Wat is het verschil tussen de Set-node en de Edit Fields-node in n8n?

De Edit Fields-node (vroeger de Set-node geheten in oudere versies) en de huidige Set-node doen grotendeels hetzelfde: velden toevoegen, wijzigen of verwijderen. In recentere versies van n8n heet de node officieel 'Edit Fields (Set)' en is de interface iets anders ingedeeld met een tabel-weergave in plaats van een formulierweergave. Functioneel zijn ze equivalent voor de meeste toepassingen. De Code-node is de keuze als je logica nodig hebt die niet via de set-interface kan: conditionele waarden, lussen over deellijsten of complexe stringmanipulaties.

Hoe refereer ik data van een eerdere node, niet de vorige?

Standaard verwijst $json naar de output van de direct vorige node. Wil je data van een specifieke eerdere node, gebruik dan $('Naam van de node').item.json.veldnaam. Vervang 'Naam van de node' door de exacte naam zoals die in de workflow staat. Dit werkt zowel in expressions in de Set-node als in de Code-node. Let erop dat de exacte naam inclusief hoofd- en kleine letters overeenkomt met de naam van de node in het canvas.

Hoe verwerk ik een array van items in de Code-node?

In de Code-node is items een array van alle inkomende items. Elke item heeft een json-object met de daadwerkelijke data. Gebruik items.map() om elk item te transformeren en een nieuwe array terug te geven. Gebruik items.filter() om items te filteren. Gebruik items.flatMap() als een item meerdere items moet opleveren. Return altijd een array van objecten met de structuur { json: { ... } }, anders geeft n8n een foutmelding over de output-structuur.

Hoe zet ik een Excel-datumgetal (serienummer) om naar een echte datum?

Excel slaat datums op als het aantal dagen sinds 1 januari 1900. Serienummer 45108 is bijvoorbeeld 14 juli 2023. Om dit om te zetten in JavaScript: new Date((excelSerial - 25569) * 86400 * 1000).toISOString(). De waarde 25569 is het aantal dagen tussen 1 januari 1900 (Excel-nulpunt) en 1 januari 1970 (JavaScript-nulpunt). Let op: Excel heeft een historische bug waarbij 1900 als schrikkeljaar wordt behandeld, wat betekent dat je voor datums van voor maart 1900 een correctie van 1 dag nodig hebt.

Hier over sparren?

Plan een vrijblijvend gesprek. We luisteren mee, schetsen een aanpak en geven een eerlijk beeld van wat haalbaar is, zonder verkoopdruk.