n8nen.nl logo n8nen.nl

N8N Set/Edit Fields Node: Complete Gids voor Data Transformatie (2025)

2025-01-03 Sam van N8N Nederland
N8N Set/Edit Fields Node: Complete Gids voor Data Transformatie (2025)
INPUT DATA firstName: "Jan" lastName: "Jansen" age: 35 email: "jan@..." SET/EDIT FIELDS Transform Rename Calculate Filter OUTPUT DATA fullName: "Jan Jansen" birthYear: 1990 username: "jjansen" isAdult: true

De Set/Edit Fields node (voorheen bekend als de Set node) is een van de meest fundamentele en krachtige nodes in N8N. Deze node vormt het hart van data transformatie in je workflows en stelt je in staat om data precies te manipuleren zoals je applicaties dat vereisen. Of je nu velden moet hernoemen voor API-compatibiliteit, waarden moet berekenen, of data moet filteren - de Set/Edit Fields node is je go-to gereedschap.

In deze uitgebreide gids duiken we diep in alle mogelijkheden van deze essentiële node, van basis mapping tot geavanceerde JavaScript expressions, met praktische voorbeelden die je direct kunt toepassen in je eigen workflows.

Wat is de Set/Edit Fields Node?

De Set/Edit Fields node is een data transformatie node die je volledige controle geeft over de data die door je workflow stroomt. Deze node functioneert als een centrale hub waar je:

  • Nieuwe velden creëert met statische of dynamische waarden
  • Bestaande velden wijzigt of overschrijft
  • Velden hernoemt om aan API-vereisten te voldoen
  • Data filtert door alleen specifieke velden door te geven
  • Waarden berekent met JavaScript expressions
  • Data structuren transformeert van plat naar genest of vice versa
Set/Edit Fields Node Operaties Create Nieuwe velden Modify Wijzig waarden Rename Hernoem keys Filter Selecteer velden Calculate Bereken waarden Transform Data structuren Validate Check & clean

Basis Configuratie en Modi

De Set/Edit Fields node biedt twee hoofdmodi voor het bewerken van data:

1. Manual Mapping Mode

In de Manual Mapping mode gebruik je de grafische interface om velden te configureren. Dit is de meest gebruiksvriendelijke methode:

Voordelen Manual Mapping:

  • Visuele drag-and-drop interface
  • Direct preview van data transformaties
  • Automatische type detectie
  • Ingebouwde validatie
  • Eenvoudig voor beginners

2. JSON Output Mode

In de JSON Output mode schrijf je direct JSON die N8N aan de input data toevoegt:

{
  "fullName": "{{ $json.firstName + ' ' + $json.lastName }}",
  "age": "{{ new Date().getFullYear() - $json.birthYear }}",
  "isActive": true,
  "metadata": {
    "processed": "{{ new Date().toISOString() }}",
    "version": "2.0"
  }
}

Core Operaties in Detail

1. Nieuwe Velden Creëren

Het toevoegen van nieuwe velden is een van de meest gebruikte operaties. Je kunt zowel statische als dynamische waarden gebruiken:

Type Voorbeeld Use Case
Static String "Nederland" Vaste waarden toevoegen
Static Number 42 Default waarden instellen
Expression {{ $json.price * 1.21 }} BTW berekenen
Date/Time {{ $now.toISO() }} Timestamps toevoegen
Conditional {{ $json.age >= 18 ? 'Adult' : 'Minor' }} Categoriseren

2. Velden Hernoemen

Het hernoemen van velden is cruciaal voor API-integratie. Verschillende systemen gebruiken verschillende naamconventies:

// Van CamelCase naar snake_case
firstName → first_name
lastName → last_name
phoneNumber → phone_number

// Van Nederlands naar Engels
voornaam → firstName
achternaam → lastName
geboortedatum → dateOfBirth

3. Data Filteren

Met de optie "Include Other Input Fields" kun je bepalen welke velden worden doorgegeven:

Filter Strategie:

  • Enabled (default): Alle input velden worden doorgegeven
  • Disabled: Alleen gedefinieerde velden worden doorgegeven
  • Gebruik: Perfect voor het verwijderen van gevoelige data

Geavanceerde Expression Patterns

De kracht van de Set/Edit Fields node ligt in het gebruik van JavaScript expressions. Hier zijn de meest gebruikte patterns:

String Manipulatie

// Hoofdlettergebruik
{{ $json.name.toUpperCase() }}                    // ALLES IN HOOFDLETTERS
{{ $json.name.toLowerCase() }}                    // alles in kleine letters
{{ $json.name.charAt(0).toUpperCase() + $json.name.slice(1) }} // Eerste Letter Hoofdletter

// Trimmen en opschonen
{{ $json.email.trim().toLowerCase() }}            // Spaties verwijderen en lowercase
{{ $json.phone.replace(/[^0-9]/g, '') }}         // Alleen cijfers behouden

// Combineren
{{ `${$json.street} ${$json.number}, ${$json.city}` }} // Adres samenstellen
{{ [$json.firstName, $json.lastName].join(' ') }}      // Array naar string

Numerieke Berekeningen

// Basis berekeningen
{{ $json.price * 1.21 }}                          // BTW toevoegen (21%)
{{ ($json.price * $json.quantity).toFixed(2) }}  // Totaal met 2 decimalen
{{ Math.round($json.amount / 100) }}              // Centen naar euro's

// Percentages
{{ (($json.current / $json.total) * 100).toFixed(1) + '%' }} // Percentage berekenen
{{ $json.discount ? $json.price * (1 - $json.discount/100) : $json.price }} // Korting toepassen

Datum en Tijd

// Huidige datum/tijd
{{ $now.toISO() }}                                // ISO format: 2025-01-03T10:30:00.000Z
{{ $now.format('dd-MM-yyyy') }}                   // Nederlandse datum: 03-01-2025
{{ $now.plus({days: 7}).toISO() }}               // Week later

// Datum manipulatie
{{ DateTime.fromISO($json.date).plus({months: 1}).toISO() }} // Maand toevoegen
{{ DateTime.fromISO($json.date).toFormat('dd LLLL yyyy') }}  // 03 januari 2025

// Leeftijd berekenen
{{ Math.floor(DateTime.now().diff(DateTime.fromISO($json.birthDate), 'years').years) }}

Array Operaties

// Array methoden
{{ $json.tags.join(', ') }}                       // Array naar string
{{ $json.items.map(item => item.name) }}          // Specifiek veld extraheren
{{ $json.prices.reduce((a, b) => a + b, 0) }}    // Som berekenen
{{ $json.emails.filter(e => e.includes('@')) }}   // Filteren

// Array checks
{{ $json.categories.includes('premium') }}        // Boolean check
{{ $json.items.length }}                          // Aantal items
{{ $json.values.sort((a, b) => a - b) }}         // Sorteren

Praktische Use Cases

Use Case 1: E-commerce Order Processing

E-commerce Order Transformatie WooCommerce Data billing_first_name billing_last_name line_items[] total currency date_created Set/Edit Fields Combine names Calculate totals Format dates Add metadata Clean data ERP System Data customerName orderItems totalAmount taxAmount orderDate processedAt
// E-commerce order transformatie
{
  // Klantgegevens combineren
  "customerName": "{{ $json.billing_first_name + ' ' + $json.billing_last_name }}",
  
  // Order items transformeren
  "orderItems": "{{ $json.line_items.map(item => ({
    sku: item.sku,
    name: item.name,
    quantity: item.quantity,
    price: parseFloat(item.price),
    total: parseFloat(item.total)
  })) }}",
  
  // Financiële berekeningen
  "totalAmount": "{{ parseFloat($json.total) }}",
  "taxAmount": "{{ parseFloat($json.total_tax) }}",
  "netAmount": "{{ parseFloat($json.total) - parseFloat($json.total_tax) }}",
  
  // Datum formatting
  "orderDate": "{{ DateTime.fromISO($json.date_created).toFormat('yyyy-MM-dd') }}",
  "processedAt": "{{ $now.toISO() }}",
  
  // Metadata toevoegen
  "source": "WooCommerce",
  "currency": "{{ $json.currency || 'EUR' }}",
  "status": "pending_processing"
}

Use Case 2: CRM Contact Synchronisatie

// Contact data transformatie voor CRM
{
  // Namen standaardiseren
  "firstName": "{{ $json.voornaam.trim().charAt(0).toUpperCase() + $json.voornaam.slice(1).toLowerCase() }}",
  "lastName": "{{ $json.achternaam.trim().toUpperCase() }}",
  
  // Email validatie en opschoning
  "email": "{{ $json.email.trim().toLowerCase() }}",
  "emailValid": "{{ $json.email.includes('@') && $json.email.includes('.') }}",
  
  // Telefoon formatting
  "phone": "{{ $json.telefoon.replace(/[^0-9+]/g, '') }}",
  "phoneFormatted": "{{ $json.telefoon.replace(/^06/, '+316') }}",
  
  // Adres samenstellen
  "fullAddress": "{{ [$json.straat, $json.huisnummer, $json.postcode, $json.plaats].filter(Boolean).join(', ') }}",
  
  // Lead scoring
  "leadScore": "{{ 
    ($json.email ? 20 : 0) + 
    ($json.telefoon ? 20 : 0) + 
    ($json.bedrijf ? 30 : 0) + 
    ($json.budget > 10000 ? 30 : 10) 
  }}",
  
  // Tags genereren
  "tags": "{{ [
    $json.bron,
    $json.land || 'NL',
    $json.interesse,
    $json.budget > 50000 ? 'enterprise' : 'standard'
  ].filter(Boolean) }}"
}

Use Case 3: API Response Normalisatie

// Verschillende API responses normaliseren
{
  // Consistente ID formatting
  "id": "{{ $json.id || $json._id || $json.ID || $json.uuid }}",
  
  // Status normalisatie
  "status": "{{ 
    ($json.status || $json.state || $json.condition || 'unknown')
    .toLowerCase()
    .replace('_', '-') 
  }}",
  
  // Timestamp standaardisatie
  "createdAt": "{{ 
    $json.created_at || 
    $json.createdAt || 
    $json.created || 
    $json.timestamp || 
    $now.toISO() 
  }}",
  
  // Error handling
  "hasError": "{{ !!($json.error || $json.errors || $json.errorMessage) }}",
  "errorMessage": "{{ $json.error?.message || $json.errors?.[0] || $json.errorMessage || null }}",
  
  // Data extractie met fallbacks
  "data": "{{ 
    $json.data || 
    $json.result || 
    $json.payload || 
    $json.body || 
    $json 
  }}"
}

Best Practices en Optimalisatie

Performance Tips

Optimalisatie Strategieën:

  • Minimaliseer complexe expressions: Splits complexe berekeningen op in meerdere velden
  • Gebruik caching: Hergebruik berekende waarden in latere expressions
  • Filter vroeg: Verwijder onnodige data zo vroeg mogelijk in de workflow
  • Batch processing: Gebruik de Split In Batches node voor grote datasets
  • Vermijd nested loops: Gebruik array methoden zoals map() efficiënt

Error Handling

// Veilige data access met fallbacks
{
  // Null/undefined checking
  "name": "{{ $json.name || 'Unknown' }}",
  
  // Nested property safe access
  "city": "{{ $json.address?.city || 'Not specified' }}",
  
  // Type conversie met validatie
  "age": "{{ 
    isNaN(parseInt($json.age)) ? null : parseInt($json.age) 
  }}",
  
  // Try-catch voor complexe operaties
  "parsed": "{{ 
    (() => {
      try {
        return JSON.parse($json.data);
      } catch(e) {
        return null;
      }
    })() 
  }}"
}

Dot Notation Configuratie

De Set/Edit Fields node ondersteunt standaard dot notation voor het creëren van geneste structuren:

Dot Notation Enabled Dot Notation Disabled
user.name = "Jan"
Resultaat: { user: { name: "Jan" } }
user.name = "Jan"
Resultaat: { "user.name": "Jan" }

Integratie met Andere Nodes

De Set/Edit Fields node werkt naadloos samen met andere N8N nodes:

Voor Merge Operations

Gebruik Set/Edit Fields om keys te normaliseren voordat je data merged met de Merge node:

// Keys aligneren voor merge
{
  "customerId": "{{ $json.customer_id || $json.klant_id }}",
  "orderId": "{{ $json.order_number || $json.bestelling_nr }}"
}

Na HTTP Request

Transform API responses van de HTTP Request node:

// API response opschonen
{
  "success": "{{ $json.status === 200 }}",
  "data": "{{ $json.body.data }}",
  "timestamp": "{{ $now.toISO() }}"
}

Voor Database Operations

Prepare data voor database inserts:

// Database-ready format
{
  "created_at": "{{ $now.toSQL() }}",
  "updated_at": "{{ $now.toSQL() }}",
  "is_active": "{{ $json.status === 'active' ? 1 : 0 }}",
  "json_data": "{{ JSON.stringify($json.metadata) }}"
}

Troubleshooting Guide

Veelvoorkomende Problemen

Probleem Oorzaak Oplossing
Expression geeft undefined Veld bestaat niet Gebruik fallbacks: $json.field || 'default'
Type mismatch errors Verkeerde data types Expliciet converteren: String(), Number()
Nested structure werkt niet Dot notation disabled Enable "Support Dot Notation" optie
Data wordt overschreven Include fields disabled Enable "Include Other Input Fields"
Performance issues Complexe expressions Gebruik Code node voor complexe logic

Debug Tips

Debug Strategieën:

  • Gebruik {{ console.log($json) }} in expressions voor debugging
  • Test expressions eerst met één item voordat je de hele dataset verwerkt
  • Gebruik de Preview functie om transformaties te valideren
  • Split complexe transformaties op in meerdere Set/Edit Fields nodes
  • Document je expressions met comments: /* BTW berekening */ $json.price * 1.21

Geavanceerde Patterns

Dynamic Field Generation

// Dynamisch velden genereren op basis van conditions
{
  ...($json.type === 'business' && {
    "kvkNumber": $json.kvk,
    "vatNumber": $json.btw,
    "companyName": $json.bedrijfsnaam
  }),
  
  ...($json.type === 'personal' && {
    "firstName": $json.voornaam,
    "lastName": $json.achternaam,
    "birthDate": $json.geboortedatum
  }),
  
  // Gemeenschappelijke velden
  "email": $json.email,
  "phone": $json.telefoon
}

Data Validation Patterns

// Uitgebreide validatie met feedback
{
  "validationResults": {
    "email": {
      "valid": "{{ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) }}",
      "message": "{{ /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) ? 'Valid' : 'Invalid email format' }}"
    },
    "phone": {
      "valid": "{{ /^[0-9+\-\s()]+$/.test($json.phone) && $json.phone.replace(/\D/g, '').length >= 10 }}",
      "message": "{{ $json.phone.replace(/\D/g, '').length < 10 ? 'Too short' : 'Valid' }}"
    },
    "postalCode": {
      "valid": "{{ /^[1-9][0-9]{3}\s?[A-Z]{2}$/i.test($json.postalCode) }}",
      "message": "{{ /^[1-9][0-9]{3}\s?[A-Z]{2}$/i.test($json.postalCode) ? 'Valid' : 'Invalid Dutch postal code' }}"
    }
  },
  "isValid": "{{ 
    /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test($json.email) &&
    /^[0-9+\-\s()]+$/.test($json.phone) &&
    /^[1-9][0-9]{3}\s?[A-Z]{2}$/i.test($json.postalCode)
  }}"
}

Batch Metadata Enrichment

// Metadata toevoegen voor tracking
{
  // Bestaande data behouden
  ...($json),
  
  // Processing metadata
  "_metadata": {
    "processedAt": "{{ $now.toISO() }}",
    "workflowId": "{{ $workflow.id }}",
    "executionId": "{{ $execution.id }}",
    "nodeId": "{{ $node.id }}",
    "itemIndex": "{{ $itemIndex }}",
    "environment": "{{ $env.NODE_ENV || 'production' }}",
    "version": "1.0.0"
  },
  
  // Data quality indicators
  "_quality": {
    "completeness": "{{ 
      Object.keys($json).filter(k => $json[k] !== null && $json[k] !== '').length / 
      Object.keys($json).length 
    }}",
    "hasRequiredFields": "{{ 
      ['email', 'name', 'phone'].every(field => $json[field]) 
    }}"
  }
}

Conclusie en Next Steps

De Set/Edit Fields node is het Zwitserse zakmes van data transformatie in N8N. Van simpele veld hernoeming tot complexe data manipulatie met JavaScript expressions - deze node biedt alle tools die je nodig hebt voor professionele data transformatie.

Key Takeaways

  • Gebruik Manual Mapping voor eenvoudige transformaties en visuele feedback
  • Switch naar JSON Output mode voor complexe, dynamische transformaties
  • Leverage JavaScript expressions voor krachtige data manipulatie
  • Filter data vroeg in je workflow voor optimale performance
  • Combineer met andere nodes zoals Code node voor ultra-complexe logic
  • Test expressions met preview voordat je grote datasets verwerkt
  • Document complexe transformaties voor toekomstig onderhoud

Veelgestelde Vragen

Wanneer gebruik ik Set/Edit Fields vs Code node?

Gebruik Set/Edit Fields voor standaard transformaties en mapping. Switch naar de Code node wanneer je loops, complexe conditionals, of externe libraries nodig hebt.

Kan ik binary data manipuleren met Set/Edit Fields?

Set/Edit Fields werkt primair met JSON data. Voor binary data manipulatie gebruik je beter de Code node of specifieke binary processing nodes.

Hoe handel ik null/undefined values af?

Gebruik altijd fallbacks in je expressions: {{ $json.field || 'default' }} of de optional chaining operator: {{ $json.nested?.field }}

Is er een limiet aan het aantal velden dat ik kan toevoegen?

Er is geen harde limiet, maar voor performance redenen is het beter om niet meer dan 50-100 velden per node te manipuleren. Split complexe transformaties over meerdere nodes.

Deze gids wordt regelmatig bijgewerkt met nieuwe features en best practices. Bookmark deze pagina en check regelmatig voor updates over de Set/Edit Fields node in N8N.

#n8n #set node #edit fields #data transformatie #workflow automation #javascript expressions #data mapping #tutorial #handleiding