理解数据结构#
在本章中,您将学习 n8n 的数据结构,以及如何使用代码节点来转换数据和模拟节点输出。
n8n 的数据结构#
从基本意义上讲,n8n 节点作为提取、转换、加载 (ETL) 工具运行。节点允许您从多个不同来源访问(提取)数据,以特定方式修改(转换)该数据,并将其传递(加载)到需要的地方。
在工作流中从节点到节点移动的数据必须采用每个节点都能识别和解释的格式(结构)。在 n8n 中,这种必需的结构是对象数组。
About array of objects
数组是值的列表。数组可以为空或包含多个元素。每个元素存储在列表中的某个位置(索引),从 0 开始,可以通过索引号引用。例如,在数组 ["Leonardo", "Michelangelo", "Donatello", "Raphael"];
中,元素 Donatello
存储在索引 2 处。
对象存储键值对,而不像数组那样在编号索引处存储值。键值对的顺序并不重要,因为可以通过引用键名来访问值。例如,下面的对象包含两个属性(name
和 color
):
1 2 3 4 |
|
对象数组是包含一个或多个对象的数组。例如,下面的数组 turtles
包含四个对象:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
您可以使用语法 object.property
的点表示法访问对象的属性。例如,turtles[1].color
获取第二只龟的颜色。
从一个节点发送到另一个节点的数据作为 JSON 对象数组发送。此集合中的元素称为项目。

n8n 节点对传入数据的每个项目执行其操作。

使用代码节点创建数据集#
既然您已经熟悉了 n8n 数据结构,您可以使用它来创建自己的数据集或模拟节点输出。为此,请使用代码节点编写 JavaScript 代码,用以下结构定义您的对象数组:
1 2 3 4 5 6 7 |
|
例如,代表忍者神龟的对象数组在代码节点中看起来像这样:

JSON 对象
请注意,此对象数组包含一个额外的键:json
。n8n 希望您将数组中的每个对象包装在另一个对象中,并使用键 json
。

传递符合 n8n 使用的正确结构的数据是好的做法。但如果您忘记在项目中添加 json
键,也不用担心,n8n(版本 0.166.0 及以上)会自动添加。
您也可以拥有嵌套对,例如,如果您想要定义主色和辅助色。在这种情况下,您需要进一步将键值对包装在大括号 {}
中。
n8n 数据结构视频
此讲话提供了对 n8n 中数据结构的更详细解释。
Exercise#
在代码节点中,创建一个名为 myContacts
的对象数组,其中包含属性 name
和 email
,并且 email
属性进一步拆分为 personal
和 work
。
Show me the solution
在代码节点中,在 JavaScript 代码字段中,您需要编写以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
当您执行代码节点时,结果应如下所示:
使用代码节点引用节点数据#
就像您可以使用表达式引用其他节点的数据一样,您也可以在代码节点中使用某些方法和变量。
请确保在继续下一个练习之前阅读这些页面。
Exercise#
让我们基于上一个练习,其中您使用代码节点创建了一个包含两个联系人的姓名和电子邮件的数据集。现在,将第二个代码节点连接到第一个。在新节点中,编写代码来创建一个名为 workEmail
的新列,该列引用第一个联系人的工作电子邮件。
Show me the solution
在代码节点中,在 JavaScript 代码字段中,您需要编写以下代码:
1 2 3 |
|
当您执行代码节点时,结果应如下所示:
转换数据#
来自某些节点的传入数据可能具有与 n8n 中使用的不同的数据结构。在这种情况下,您需要转换数据,以便可以单独处理每个项目。
数据转换的两个最常见操作是:
- 从一个项目创建多个项目
- 从多个项目创建单个项目
有几种方法可以为上述目的转换数据:
- 使用 n8n 的数据转换节点。使用这些节点来修改包含列表(数组)的传入数据的结构,而无需在代码节点中使用 JavaScript 代码:
- 使用代码节点通过对所有项目运行一次模式编写 JavaScript 函数来修改传入数据的数据结构:
- 要从单个项目创建多个项目,您可以使用这样的 JavaScript 代码。此示例假设项目有一个名为
data
的键,设置为以下形式的项目数组:[{ "data": [{<item_1>}, {<item_2>}, ...] }]
:1 2 3 4 5
return $input.first().json.data.map(item => { return { json: item } });
- 要从多个项目创建单个项目,您可以使用以下 JavaScript 代码:
1 2 3 4 5 6 7
return [ { json: { data_object: $input.all().map(item => item.json) } } ];
- 要从单个项目创建多个项目,您可以使用这样的 JavaScript 代码。此示例假设项目有一个名为
这些 JavaScript 示例假设您的整个输入就是您想要转换的内容。如同上面的练习一样,您也可以通过在项目列表中识别特定字段来对其执行任一操作,例如,如果我们的 workEmail 示例在单个字段中有多个电子邮件,我们可以运行如下代码:
1 2 3 4 5 6 |
|
Exercise#
- 使用 HTTP 请求节点向 PokéAPI
https://pokeapi.co/api/v2/pokemon
发出 GET 请求。(此 API 不需要认证)。 - 使用拆分输出节点转换
results
字段中的数据。 - 使用代码节点转换
results
字段中的数据。
Show me the solution
- 要从 PokéAPI 获取神奇宝贝,请使用以下参数执行 HTTP 请求节点:
- 认证:无
- 请求方法:GET
- URL:https://pokeapi.co/api/v2/pokemon
- 要使用拆分输出节点转换数据,请将此节点连接到 HTTP 请求节点并设置以下参数:
- 要拆分输出的字段:results
- 包含:无其他字段
- 要使用代码节点转换数据,请将此节点连接到 HTTP 请求节点并在 JavaScript 代码字段中编写以下代码:
1 2 3 4 5 6
let items = $input.all(); return items[0].json.results.map(item => { return { json: item } });
🚀 与作者交流

📚 教程 💡 案例 🔧 技巧

⚡ 快答 🎯 定制 🚀 支持