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

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

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

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

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

n8n Set 节点的手动映射模式界面
n8n Set 节点的手动映射模式界面

核心概念:两种工作模式

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

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

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

如何使用手动映射:

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

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

模式二:JSON 输出(JSON Output)

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

JSON 模式的优势:

JSON 模式示例:


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

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

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

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

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

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

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

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


    
    
    
  {
  "address"
: {
    "city"
: "北京"
  }

}

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

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

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

n8n 工作流中 Set 节点的数据流转示意图
n8n 工作流中 Set 节点的数据流转示意图

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

技巧一:合并多个字段

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

在 Set 节点中的配置:

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

技巧二:数值计算和转换

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

配置方法:

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

技巧三:条件判断和分级

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

配置方法:

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

技巧四:添加时间戳

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

配置方法:

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

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

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

配置方法:

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

完整可执行工作流案例

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


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

这个工作流演示的功能:

功能说明输出结果
字段合并合并 firstName 和 lastNamefullName: "张三 李四"
数值计算计算两科成绩的平均分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: 确保:

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

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

总结

Set 节点的核心价值:

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

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

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

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

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


引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.set/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#