Se trasformare dati tra un’API e l’altra ti sembra complicato, il nodo set n8n è la soluzione che cerchi. È il coltellino svizzero per mappare campi, rinominare proprietà, arricchire record e costruire strutture JSON complesse senza scrivere una riga di codice. In questa guida scoprirai come padroneggiare il nodo Edit Fields di n8n per normalizzare payload webhook, preparare dati per il CRM e creare array annidati per le tue integrazioni. Esploreremo la differenza tra mappatura manuale e modalità JSON Output, quando usare espressioni $json e variabili in n8n, e come gestire opzioni avanzate come Keep Only Set Fields e supporto dot notation. Vedrai esempi pratici di trasformazione dati senza codice che ti faranno risparmiare ore di lavoro manuale. L’obiettivo è semplice: imparare a modellare i dati esattamente come servono alle tue integrazioni, mantenendo i workflow leggibili e manutenibili.

📚 Nuovo a n8n? Parti dalla guida completa: cos'è n8n e come funziona.

Cos’è il nodo Set e quando usarlo rispetto ad altri nodi

Il nodo Edit Fields di n8n (chiamato anche Set) è progettato per aggiungere, trasformare o sovrascrivere campi nel flusso dei dati. A differenza del Function/Code node che richiede JavaScript, il Set offre un’interfaccia visuale con drag&drop per la mappatura manuale dei campi in n8n. Questo lo rende accessibile anche a chi non programma, mantenendo alta la leggibilità del workflow.

Obiettivo principale: preparare i dati per il prossimo step del workflow. Che tu debba rinominare campi di un webhook, aggiungere timestamp, calcolare valori derivati o costruire oggetti complessi per un’API, il Set node è la scelta ideale quando la trasformazione è dichiarativa e non richiede loop o logiche condizionali complesse.

Quando preferire il Set node:

  • Normalizzare payload webhook n8n con campi inconsistenti
  • Arricchimento dati prima di integrazioni (aggiungere source, campaign_id, timestamp)
  • Rinominare campi per matching con schemi database
  • Costruire strutture JSON specifiche per API esterne
  • Filtrare campi sensibili prima di logging

Quando considerare alternative:

  • Function/Code node: per trasformazioni con loop, regex complessi, calcoli matematici avanzati
  • Item Lists node: per split/aggregate di array esistenti
  • Merge node: per combinare dati da flussi multipli

Il confronto Set node vs Function node si riduce a semplicità vs potenza: usa Set per l’80% dei casi comuni, passa a Function quando serve programmazione imperativa.

Modalità di configurazione: Manual Mapping vs JSON Output

Il nodo Set offre due modalità operative fondamentali che determinano come strutturi l’output:

Manual Mapping Mode

La modalità predefinita dove aggiungi campi uno alla volta attraverso l’interfaccia. Ogni campo ha:

  • Name: il nome del campo nell’output
  • Type: String, Number, Boolean, Date & Time, Binary
  • Value: fisso o calcolato tramite espressione

Esempio configurazione:

{
  "parameters": {
    "mode": "manual",
    "values": {
      "string": [
        {"name": "customer_name", "value": "={{ $json.firstName }} {{ $json.lastName }}"},
        {"name": "source", "value": "marketing_campaign"}
      ],
      "number": [
        {"name": "lead_score", "value": "={{ $json.score * 1.2 }}"}
      ]
    }
  }
}

JSON Output Mode

La modalità JSON Output nel nodo Set ti permette di definire l’intera struttura dell’output come oggetto JSON. Ideale per costruire array e oggetti annidati complessi:

{
  "parameters": {
    "mode": "jsonOutput",
    "jsonOutput": {
      "customer": {
        "id": "={{ $json.customerId }}",
        "profile": {
          "name": "={{ $json.name }}",
          "tags": ["={{ $json.source }}", "vip", "2025"]
        }
      },
      "metadata": {
        "processed_at": "={{ $now }}",
        "workflow": "lead_enrichment"
      }
    }
  }
}

Criteri di scelta:

  • Manual Mapping: quando aggiungi/modifichi pochi campi mantenendo la struttura esistente
  • JSON Output: quando costruisci una struttura completamente nuova o molto annidata

La modalità JSON è potente per template workflow n8n per mapping campi complessi verso API che richiedono schemi specifici.

Opzioni avanzate: Keep Only Set Fields, dot notation e binary data

Keep Only Set Fields

Il parametro Keep Only Set Fields significato è cruciale: determina se l’output contiene solo i campi definiti (true) o mantiene anche quelli esistenti (false).

  • keepOnlySet: false (default): aggiunge/sovrascrive campi mantenendo gli esistenti
  • keepOnlySet: true: restituisce solo i campi esplicitamente definiti

Esempio pratico:
Input: {email: "test@example.com", name: "Mario", age: 30}
Set config: aggiunge source: "web"

  • Con keepOnlySet false: {email: "test@example.com", name: "Mario", age: 30, source: "web"}
  • Con keepOnlySet true: {source: "web"}

Include in Output

La Include in Output differenza riguarda quali item processare:

  • All Items: processa tutti gli item in input
  • Selected Items: processa solo item specifici basati su indice o espressione

Supporto dot notation

Il supporto dot notation n8n permette di creare strutture annidate usando la notazione punto:

// Nome campo: "user.profile.name"
// Valore: "Mario Rossi"
// Risultato:
{
  "user": {
    "profile": {
      "name": "Mario Rossi"
    }
  }
}

Disabilita dot notation quando i tuoi campi contengono punti letterali (es. domini, versioni).

Gestione dati binari

La gestione dati binari in n8n attraverso il Set node include l’opzione “Include Binary Data”:

  • Preserva file allegati durante le trasformazioni
  • Utile quando enrichi metadati mantenendo PDF, immagini
  • Attenzione alla memoria con file grandi

Casi d’uso pratici per marketing automation

Normalizzare webhook da form diversi

Problema: form diversi inviano strutture dati inconsistenti.

Soluzione con Set node:

{
  "email": "={{ $json.mail || $json.email_address || $json.contact_email }}",
  "name": "={{ $json.full_name || $json.firstName + ' ' + $json.lastName }}",
  "source": "={{ $json.utm_source || 'direct' }}",
  "timestamp": "={{ $now }}"
}

Arricchire lead prima del CRM

Aggiungi campi calcolati e metadati:

{
  "original_data": "={{ $json }}",
  "lead_score": "={{ $json.engagement_score * 0.7 + $json.profile_score * 0.3 }}",
  "segment": "={{ $json.lead_score > 70 ? 'hot' : 'warm' }}",
  "assigned_to": "={{ $json.country === 'IT' ? 'team_italy' : 'team_global' }}",
  "created_at": "={{ $now.toISO() }}",
  "workflow_version": "2.1"
}

Preparare payload per API esterne

Molte API richiedono strutture specifiche. Con espressioni $json e variabili in n8n:

{
  "event": "track",
  "userId": "={{ $json.customer_id }}",
  "properties": {
    "campaign": "={{ $json.utm_campaign }}",
    "value": "={{ $json.order_total }}",
    "items": "={{ $json.cart_items.length }}"
  },
  "context": {
    "ip": "={{ $json.ip_address }}",
    "userAgent": "={{ $json.browser }}"
  }
}

Troubleshooting: errori comuni e soluzioni

Output vuoto o campi mancanti

Sintomi: il nodo restituisce oggetti vuoti o manca di campi attesi.

Soluzioni:

  1. Verifica Include in Output: assicurati sia “All Items”
  2. Controlla keepOnlySet: se true, definisci tutti i campi necessari
  3. Valida le espressioni: {{ $json.field }} richiede che ‘field’ esista nell’input
  4. Usa fallback: {{ $json.field || 'default' }}

Type mismatch e conversione

Gli errori di conversione tipi n8n sono comuni quando:

  • Stringhe numeriche vanno convertite: {{ Number($json.price) }}
  • Booleani da stringhe: {{ $json.active === 'true' }}
  • Date da timestamp: {{ new Date($json.timestamp) }}

Abilita “Ignore Type Conversion Errors” solo in sviluppo per identificare problemi.

Campi con caratteri speciali

Quando i nomi campo contengono spazi o caratteri speciali:

// Sbagliato: {{ $json.customer name }}
// Corretto: {{ $json["customer name"] }}

Array e oggetti complessi

Per trasformazione dati senza codice di array:

// Mappare array di ID in array di oggetti
{
  "users": "={{ $json.user_ids.map(id => ({id: id, status: 'active'})) }}"
}

Best practice e pattern avanzati

Convenzioni di naming

  • Usa snake_case per consistenza: customer_id, non customerId o customer-id
  • Prefissa campi temporanei con underscore: _temp_calculation
  • Documenta trasformazioni complesse nei commenti del nodo

Pattern di validazione

Crea un “validation layer” con Set node:

{
  "email_valid": "={{ $json.email.includes('@') }}",
  "required_fields_present": "={{ $json.name && $json.email && $json.phone }}",
  "data_quality_score": "={{ ($json.email_valid + $json.phone_valid) * 50 }}"
}

Gestione errori elegante

Usa espressioni defensive:

{
  "safe_divide": "={{ $json.denominator !== 0 ? $json.numerator / $json.denominator : 0 }}",
  "safe_access": "={{ $json.nested?.property?.value || 'not_found' }}",
  "safe_parse": "={{ (() => { try { return JSON.parse($json.json_string) } catch { return {} } })() }}"
}

Quando migrare a Function node

Passa al Function node quando:

  • Serve iterare su array con logiche complesse
  • Implementi algoritmi (ordinamento custom, deduplicazione)
  • Gestisci stato tra trasformazioni
  • Fai chiamate asincrone o usi librerie esterne

Quick Takeaways

  • Il nodo Edit Fields di n8n offre due modalità: Manual Mapping per modifiche puntuali e JSON Output per strutture complete
  • Keep Only Set Fields controlla se mantenere (false) o sostituire (true) i campi esistenti
  • Il supporto dot notation permette di creare oggetti annidati con sintassi semplice: user.profile.name
  • Usa espressioni $json con fallback per gestire dati inconsistenti: {{ $json.field || 'default' }}
  • Per trasformazioni complesse con loop o logiche avanzate, valuta il passaggio a Function/Code node
  • Include Binary Data preserva allegati durante le trasformazioni
  • Documenta sempre trasformazioni complesse per facilitare manutenzione futura

Conclusione

Il nodo Set è uno strumento fondamentale per la trasformazione dati senza codice in n8n. Abbiamo visto come la mappatura manuale dei campi ti permette di normalizzare webhook, arricchire record e preparare payload per qualsiasi API. La modalità JSON Output sblocca la creazione di strutture complesse, mentre opzioni come Keep Only Set Fields e dot notation ti danno controllo granulare sull’output. Con le espressioni $json e le tecniche di gestione errori, puoi costruire trasformazioni robuste che gestiscono dati inconsistenti senza rompersi.

Il prossimo passo? Prendi un webhook reale dal tuo sistema, identifica i campi che devi mappare per il tuo CRM o tool di email marketing, e costruisci la trasformazione con il Set node. Inizia con Manual Mapping per familiarizzare, poi sperimenta JSON Output per strutture più complesse. Ricorda: l’80% delle trasformazioni si risolve con Set node, risparmia Function node per i casi veramente complessi. Inizia semplice, itera veloce, e vedrai la produttività schizzare.

FAQ

Come gestisco campi opzionali che potrebbero non esistere?
Usa espressioni $json e variabili in n8n con operatore OR: {{ $json.optional_field || 'valore_default' }}. Questo previene errori quando il campo manca nell’input.

Qual è la differenza tra Keep Only Set Fields e Include in Output?
Keep Only Set Fields significato: controlla quali campi finiscono nell’output (solo definiti vs tutti). Include in Output differenza: determina quali item dell’array processare (tutti vs selezionati).

Posso creare array e oggetti profondamente annidati?
Sì, la modalità JSON Output nel nodo Set permette di costruire array e oggetti annidati di qualsiasi complessità usando espressioni e sintassi JSON standard.

Come converto tipi di dati (string to number, etc)?
Gestisci errori di conversione tipi n8n con funzioni JavaScript: Number(), String(), Boolean(). Esempio: {{ Number($json.price_string) * 1.22 }}.

Quando dovrei usare Function node invece di Set?
Il confronto Set node vs Function node favorisce Function per: loop su array, algoritmi complessi, gestione stato, chiamate asincrone. Set eccelle in trasformazioni dichiarative semplici.


Hai trovato utile questa guida? Condividila con il tuo team e dimmi: quale trasformazione dati automatizzerai per prima con il nodo Set? Il webhook del tuo form o l’integrazione con il CRM?

Vuoi automazioni AI su misura per la tua azienda?
Scopri la consulenza →