【n8n教程】:Set 节点,实现数据转换魔法!

【n8n教程】:Set 节点,实现数据转换魔法!

在 n8n 工作流中,数据的转换和处理是自动化的核心。Set 节点(编辑字段节点)是 n8n 最强大的数据操作工具,它允许你创建、修改、重命名或删除工作流中的数据字段,就像一把数据处理的"瑞士军刀"。本教程将带你从零开始,通过实践案例快速掌握 Set 节点的所有核心功能。

点击获取最新AI资讯、n8n工作流、开发经验分享

Set 节点是什么?为什么你需要它?

Set 节点的核心作用是让你完全控制工作流中的数据结构。无论数据从哪里来(API、数据库、表单等),Set 节点都能帮你将原始、混乱的数据转换成你需要的格式。

想象这样一个场景:你从一个 API 获取了学生数据,其中名字被分成"firstName"和"lastName"两个字段,但你想在数据库中存储为单一的"fullName"字段。这就是 Set 节点大显身手的时候。它不仅能合并字段,还能进行计算、条件判断、格式转换,甚至添加时间戳。

核心概念:两种工作模式

Set 节点提供了两种不同的模式来满足不同的使用场景:

模式一:手动映射(Manual Mapping)

手动映射是初学者的最佳选择。这种模式提供了直观的图形界面,你可以逐个添加或修改字段,无需编写代码。

如何使用手动映射:

  1. 打开 Set 节点,选择 Mode > Manual Mapping
  2. 点击 Add Field 按钮添加新字段
  3. 输入字段名称(例如"fullName")
  4. 在值字段中输入内容或表达式

关键技巧:你可以从左侧的 INPUT 面板拖拽前一个节点的数据到值字段中,这样 n8n 会自动生成表达式。例如,如果你拖拽 firstName 字段,n8n 会为你写入 {``{ $json.firstName }},这是一个表达式,用来动态获取前一个节点的 firstName 值。

模式二:JSON 输出(JSON Output)

JSON 模式适合需要创建复杂数据结构或大量字段的场景。你直接编写 JSON 代码来定义所有字段,这给了你更多的灵活性。

JSON 模式的优势:

  • 可以快速批量创建多个字段
  • 能够构建嵌套的对象和数组结构
  • 更容易复制粘贴复杂的配置

JSON 模式示例:

json 复制代码
{
  "fullName": "{{ $json.firstName }} {{ $json.lastName }}",
  "email": "{{ $json.email }}",
  "joinDate": "{{ $now.toISOString() }}",
  "status": "active"
}

关键参数详解:让数据处理更精准

1. Keep Only Set Fields(仅保留设置的字段)

这个选项决定了输出数据中包含哪些内容。

  • 启用:工作流只输出你在 Set 节点中明确定义的字段,所有其他输入数据都会被丢弃。这很有用,特别是当前一个节点返回了许多不需要的字段时。
  • 禁用(默认):保留所有来自前一个节点的原始数据,加上你新添加或修改的字段。这是更安全的选择,不会意外丢失数据。

2. Include Binary Data(包含二进制数据)

如果你的工作流处理文件、图片等二进制数据,启用此选项可确保这些数据不会在 Set 节点处丢失。

3. Support Dot Notation(支持点表示法)

默认情况下,如果你设置一个名为 address.city 的字段,n8n 会创建一个嵌套的 JSON 对象结构,就像这样:

json 复制代码
{
  "address": {
    "city": "北京"
  }
}

如果禁用此选项,就会变成平级的字段 address.city(键名包含点)。

4. Ignore Type Conversion Errors(忽略类型转换错误)

启用此选项让 n8n 在类型不匹配时不报错,例如试图将文本转换为数字时。

实战技巧:五个常见使用场景

技巧一:合并多个字段

场景 :从 API 获取的数据中,用户名被分成 first_name 和 last_name,你需要合并成 fullName。

在 Set 节点中的配置:

  • 字段名:fullName
  • 字段值:{``{ $json.first_name }} {``{ $json.last_name }}

运行后,输出数据会包含一个新的 fullName 字段,值为两个名字的组合。

技巧二:数值计算和转换

场景:学生的数学和英文成绩分别存储,你需要计算平均分。

配置方法:

  • 字段名:averageScore
  • 字段值:{``{ ($json.mathScore + $json.englishScore) / 2 }}

Set 节点会自动执行计算,得出平均分。

技巧三:条件判断和分级

场景:根据成绩给学生分等级(90 以上优秀、80-89 良好、80 以下及格)。

配置方法:

  • 字段名:grade
  • 字段值:{``{ $json.averageScore >= 90 ? '优秀' : $json.averageScore >= 80 ? '良好' : '及格' }}

这使用了 JavaScript 的三元运算符,实现条件分支。

技巧四:添加时间戳

场景:记录每条数据处理的时间,便于审计和日志。

配置方法:

  • 字段名:processedAt
  • 字段值:{``{ $now.toISOString() }}

$now 是 n8n 的内置函数,返回当前时间的 ISO 格式字符串。

技巧五:重命名和清理数据

场景 :后端 API 返回的字段名称不规范(例如 usr_eml 代表用户邮箱),需要转换为可读的名称。

配置方法:

  • 字段名:email
  • 字段值:{``{ $json.usr_eml }}

然后启用 Keep Only Set Fields,这样输出中就只有规范化的字段名了。

完整可执行工作流案例

下面是一个完整的、可直接在 n8n 中运行的工作流,演示了 Set 节点的多个实际应用。这个工作流模拟处理学生成绩数据:

json 复制代码
{
  "name": "学生数据转换工作流-Set节点教程",
  "nodes": [
    {
      "parameters": {},
      "id": "trigger",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [50, 100]
    },
    {
      "parameters": {
        "mode": "manual",
        "fields": [
          {
            "name": "firstName",
            "value": "张三",
            "type": "string"
          },
          {
            "name": "lastName",
            "value": "李四",
            "type": "string"
          },
          {
            "name": "mathScore",
            "value": 85,
            "type": "number"
          },
          {
            "name": "englishScore",
            "value": 92,
            "type": "number"
          },
          {
            "name": "status",
            "value": "active",
            "type": "string"
          }
        ]
      },
      "id": "step1",
      "name": "Set - 原始数据",
      "type": "n8n-nodes-base.set",
      "typeVersion": 1,
      "position": [250, 100],
      "credentials": {}
    },
    {
      "parameters": {
        "mode": "manual",
        "fields": [
          {
            "name": "fullName",
            "value": "{{ $json.firstName }} {{ $json.lastName }}",
            "type": "string"
          },
          {
            "name": "averageScore",
            "value": "{{ ($json.mathScore + $json.englishScore) / 2 }}",
            "type": "number"
          },
          {
            "name": "grade",
            "value": "{{ $json.averageScore >= 90 ? '优秀' : $json.averageScore >= 80 ? '良好' : '及格' }}",
            "type": "string"
          },
          {
            "name": "timestamp",
            "value": "{{ $now.toISOString() }}",
            "type": "string"
          }
        ]
      },
      "id": "step2",
      "name": "Set - 数据转换",
      "type": "n8n-nodes-base.set",
      "typeVersion": 1,
      "position": [450, 100],
      "credentials": {}
    }
  ],
  "connections": {
    "trigger": {
      "main": [
        [
          {
            "node": "step1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "step1": {
      "main": [
        [
          {
            "node": "step2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

如何使用这个工作流:

  1. 复制上面的 JSON 代码 (从 { 开始到最后的 })
  2. 打开 n8n 工作区,创建一个新工作流
  3. 导入工作流:在 n8n 中找到"导入"选项,粘贴上面的 JSON 代码
  4. 执行工作流:点击"执行工作流"或按下相应按钮
  5. 查看结果:在最后一个 Set 节点("Set - 数据转换")中可以看到转换后的完整数据

这个工作流演示的功能:

功能 说明 输出结果
字段合并 合并 firstName 和 lastName fullName: "张三 李四"
数值计算 计算两科成绩的平均分 averageScore: 88.5
条件判断 根据平均分分等级 grade: "良好"
时间戳 添加处理时间 timestamp: "2025-12-01T14:28:00Z"

初学者常见问题解答

Q: Set 节点和 Function 节点有什么区别?

A: Set 节点用于简单的数据转换(添加、修改、删除字段),而 Function 节点允许你编写完整的 JavaScript 代码处理更复杂的逻辑。对于大多数场景,Set 节点已经足够了。

Q: 如何访问前一个节点的嵌套数据?

A: 使用点表示法。例如,如果前一个节点返回 { address: { city: '北京' } },你可以用 {``{ $json.address.city }} 来访问城市名称。

Q: 我的表达式总是出错,怎么办?

A: 确保:

  • 使用 {``{ }} 包围表达式
  • 字符串用单引号或双引号包围
  • 检查字段名称拼写是否正确(区分大小写)
  • 使用"Execute Step"测试节点,查看错误提示

Q: 如何在 Set 节点中处理数组数据?

A: 可以直接在 JSON 模式中创建数组。例如:[ {``{ $json.item1 }}, {``{ $json.item2 }} ]。对于复杂的数组处理,可能需要配合使用 Item Lists 或 Function 节点。

总结

Set 节点的核心价值:

✅ 简单易用:图形化界面让初学者快速上手

✅ 功能强大:支持表达式、计算、条件判断

✅ 数据安全:灵活的选项确保你不会意外丢失数据

✅ 工作流中枢:几乎每个复杂工作流都会用到 Set 节点

掌握 Set 节点后,你就能够:

  • 清理和格式化来自任何数据源的数据
  • 为下游节点(如数据库、API、邮件)准备正确格式的数据
  • 添加业务逻辑,如计算、分类、标记等
  • 构建更复杂的自动化工作流

相关推荐
GAMC1 小时前
chrome-devtools-mcp:让 AI 编码助手真正"看见"浏览器
前端·人工智能
丁希希哇1 小时前
激活函数(Activation Function)
人工智能·机器学习
虫无涯1 小时前
Claude Code 频繁卡住?一文搞懂Spinner状态标识、卡顿根源与排查方案
人工智能·claude
虫无涯1 小时前
踩坑实战:Roo Code 调用本地模型卡顿?手把手教你优化到原生速度
人工智能
tellmewhoisi1 小时前
机器学习:集成学习4(XGBoost前置知识泰勒展开式2)
人工智能·机器学习·集成学习
西部驯兽师1 小时前
制造企业的信息化选型课题(二)
大数据·人工智能·制造
怪奇云呼军1 小时前
从 ElevenLabs 看工具调用:闪电智能 Voice Agent 的企业集成验收设计
android·大数据·运维·服务器·网络·人工智能·kotlin
云杂项1 小时前
A Survey of Privacy Attacks in Machine Learning(个人笔记)
人工智能·安全·机器学习
Runwise创新社区1 小时前
开源大模型从本地跑通到生产上线:以千问为例的五级部署阶梯与六项选型检查
人工智能·系统架构·开源