在使用n8n进行工作流自动化时,数据处理是核心技能。无论是从API获取数据、转换格式、还是在不同节点之间映射数据,理解n8n的数据结构都是必不可少的。本教程将带你从零开始理解n8n的数据流、数据映射和数据转换,并通过实际案例帮助你快速掌握这一关键能力。
点击获取最新AI资讯、n8n工作流、开发经验分享
n8n中的数据是指节点接收和处理的信息。在底层,所有在节点之间传递的数据都遵循一个统一的结构。
n8n中所有数据都以JSON对象数组的形式传递。每个数据项都有这样的结构:
关键概念:
{ "name": "John", "age": 30 }
[item1, item2, item3]
假设你从HTTP请求节点获取了一个用户列表,数据可能是这样的:
这个数组包含了2个item,每个item代表一个用户。
n8n中的每个节点都可以逐个处理多个数据项。这是n8n设计的核心特性。
例子:创建Trello卡片
如果你配置一个Trello节点来"创建卡片",并使用表达式 {{ $json.name }} 来设置卡片名称,当输入包含3个item时:
{{ $json.name }}
最后,Trello中会有3张新卡片。
这种设计让你可以:
数据映射是指从前一个节点的输出中引用数据,并将其传递给下一个节点的过程。它不涉及数据转换,只是引用。
这是初学者最推荐的方法:
步骤:
例子:
假设你的HTTP Request节点返回了这样的数据:
现在你要在Gmail节点中使用 customer_name。只需在INPUT面板中拖拽 customer_name 字段到Gmail的"收件人名称"参数,n8n会自动生成表达式:
customer_name
对于更复杂的需求,你可以直接在表达式编辑器中编写:
实际示例:
如果你的数据结构是这样的:
你可以这样访问:
{{ $json.user.profile.name }}
{{ $json.user.profile.email }}
{{ $json.order.id }}
{{ $json.order.items[0] }}
从外部系统获取的数据格式可能与n8n的标准数据结构不兼容。你需要将其转换为n8n可以处理的格式。
场景: 你的API返回了这样的数据:
问题: 这是1个item,但你需要为每个产品创建一条记录。
解决方案: 使用Split Out节点,选择要分割的字段为 products
products
输出: 3个item,每个代表一个产品
场景: 你需要为每个用户生成一个欢迎邮件,并创建一个新字段 greeting
greeting
重要提示: 从n8n 0.166.0版本开始,Function和Code节点会自动处理json键和数组包装,让代码编写更简洁。
数据固定是指保存节点的输出数据,并在后续测试中使用这个保存的数据,而不是每次都重新获取。
好处:
现在,即使外部系统数据改变,下次运行时也会使用固定的数据。
有时你想测试不同的场景。你可以编辑固定的数据:
这对于测试边界情况非常有用:
当节点处理多个item时,n8n会自动跟踪每个输出item与哪个输入item相关。这就是项目链接。
n8n会自动尝试链接item:
在表达式编辑器中,你可以访问之前节点中的item:
假设你有一个工作流:
在Google Sheets节点中,如果你想引用HTTP Request节点中的原始用户名:
数据表是n8n内置的轻量级数据存储,无需外部数据库就可以在工作流中存储和管理数据。
第一步:创建数据表
第二步:在工作流中使用
使用Data table节点来:
例子:防止重复运行
你需要创建一个工作流,用来:
以下是一个完整的可导入工作流JSON:
节点功能详解:
Manual Trigger - 手动触发工作流
Simulate API Response - 模拟从API获取的产品列表
Split Products - 拆分数据
Add Calculated Fields - 使用Set节点添加新字段
in_stock
tax
final_price
Filter Low Stock - 过滤操作
步骤1:导入工作流
步骤2:运行工作流
步骤3:理解数据转换过程
步骤4:修改和扩展
执行完整工作流后,最后的Filter Low Stock节点会输出:
注意: 平板(id: 2)被过滤掉了,因为其库存(30)小于100。
✅ n8n所有数据都是JSON对象数组 - 每个item都包含一个json键
✅ 节点逐个处理item - 一个表达式应用于每个item
✅ 数据映射是数据流的基础 - 拖拽或表达式都可以实现
✅ 数据转换处理不兼容的格式 - Split Out、Aggregate等节点是你的工具
✅ 代码节点提供强大的灵活性 - Function和Code节点用于复杂操作
✅ 数据固定加速开发 - 避免重复API调用
✅ 项目链接追踪数据来源 - 高级工作流必须理解
✅ 在小规模数据存储使用数据表 - 无需外部数据库
Q:为什么我的表达式 $json.fieldName 返回undefined?
$json.fieldName
A:可能是因为:
$json.parent.child
Q:如何同时处理多个来源的数据?
A:使用Merge节点来组合多个节点的输出,然后使用表达式访问每个源的数据。
Q:Split Out和Aggregate有什么区别?
A:Split Out将1个包含列表的item分成多个item;Aggregate将多个item组合成1个。它们是相反的操作。
Q:我能在工作流中存储10GB的数据吗?
A:不能。数据表的默认限制是50MB。使用真实数据库(MySQL、PostgreSQL)来存储大规模数据。
官方文档
n8n系列教程
【n8n教程】:掌握n8n数据处理 - 从基础到实战
在使用n8n进行工作流自动化时,数据处理是核心技能。无论是从API获取数据、转换格式、还是在不同节点之间映射数据,理解n8n的数据结构都是必不可少的。本教程将带你从零开始理解n8n的数据流、数据映射和数据转换,并通过实际案例帮助你快速掌握这一关键能力。
点击获取最新AI资讯、n8n工作流、开发经验分享
第一部分:理解n8n的数据结构
什么是n8n中的数据?
n8n中的数据是指节点接收和处理的信息。在底层,所有在节点之间传递的数据都遵循一个统一的结构。
核心数据结构
n8n中所有数据都以JSON对象数组的形式传递。每个数据项都有这样的结构:
关键概念:
{ "name": "John", "age": 30 }[item1, item2, item3]简单示例
假设你从HTTP请求节点获取了一个用户列表,数据可能是这样的:
这个数组包含了2个item,每个item代表一个用户。
第二部分:数据在节点中的流动
节点如何处理多个数据项
n8n中的每个节点都可以逐个处理多个数据项。这是n8n设计的核心特性。
例子:创建Trello卡片
如果你配置一个Trello节点来"创建卡片",并使用表达式
{{ $json.name }}来设置卡片名称,当输入包含3个item时:最后,Trello中会有3张新卡片。
理解这意味着什么
这种设计让你可以:
第三部分:数据映射 - 在节点间传递数据
什么是数据映射?
数据映射是指从前一个节点的输出中引用数据,并将其传递给下一个节点的过程。它不涉及数据转换,只是引用。
方法1:拖拽式映射(最直观)
这是初学者最推荐的方法:
步骤:
例子:
假设你的HTTP Request节点返回了这样的数据:
现在你要在Gmail节点中使用
customer_name。只需在INPUT面板中拖拽customer_name字段到Gmail的"收件人名称"参数,n8n会自动生成表达式:方法2:表达式编辑器(更灵活)
对于更复杂的需求,你可以直接在表达式编辑器中编写:
实际示例:
理解嵌套数据映射
如果你的数据结构是这样的:
你可以这样访问:
{{ $json.user.profile.name }}{{ $json.user.profile.email }}{{ $json.order.id }}{{ $json.order.items[0] }}第四部分:数据转换
为什么需要数据转换?
从外部系统获取的数据格式可能与n8n的标准数据结构不兼容。你需要将其转换为n8n可以处理的格式。
常用的数据转换节点
实际示例:Split Out节点
场景: 你的API返回了这样的数据:
问题: 这是1个item,但你需要为每个产品创建一条记录。
解决方案: 使用Split Out节点,选择要分割的字段为
products输出: 3个item,每个代表一个产品
第五部分:使用代码处理数据
Function节点 vs Code节点
Function节点示例
场景: 你需要为每个用户生成一个欢迎邮件,并创建一个新字段
greetingCode节点示例 - 处理多个item
重要提示: 从n8n 0.166.0版本开始,Function和Code节点会自动处理json键和数组包装,让代码编写更简洁。
第六部分:数据固定与编辑 - 开发时的利器
什么是数据固定(Data Pinning)?
数据固定是指保存节点的输出数据,并在后续测试中使用这个保存的数据,而不是每次都重新获取。
好处:
如何固定数据
现在,即使外部系统数据改变,下次运行时也会使用固定的数据。
如何编辑固定数据
有时你想测试不同的场景。你可以编辑固定的数据:
这对于测试边界情况非常有用:
第七部分:项目链接 - 高级概念
什么是项目链接(Item Linking)?
当节点处理多个item时,n8n会自动跟踪每个输出item与哪个输入item相关。这就是项目链接。
自动项目链接规则
n8n会自动尝试链接item:
在表达式中访问链接的item
在表达式编辑器中,你可以访问之前节点中的item:
例子:
假设你有一个工作流:
在Google Sheets节点中,如果你想引用HTTP Request节点中的原始用户名:
第八部分:数据表 - 在工作流中存储数据
什么是数据表?
数据表是n8n内置的轻量级数据存储,无需外部数据库就可以在工作流中存储和管理数据。
使用场景
快速使用步骤
第一步:创建数据表
第二步:在工作流中使用
使用Data table节点来:
例子:防止重复运行
第九部分:实战案例 - 完整可执行工作流
场景介绍
你需要创建一个工作流,用来:
工作流代码
以下是一个完整的可导入工作流JSON:
工作流说明
节点功能详解:
Manual Trigger - 手动触发工作流
Simulate API Response - 模拟从API获取的产品列表
Split Products - 拆分数据
Add Calculated Fields - 使用Set节点添加新字段
in_stock: 是否有库存(布尔值)tax: 税金计算(价格×13%)final_price: 最终价格(含税)Filter Low Stock - 过滤操作
如何使用这个工作流
步骤1:导入工作流
步骤2:运行工作流
步骤3:理解数据转换过程
步骤4:修改和扩展
预期输出示例
执行完整工作流后,最后的Filter Low Stock节点会输出:
注意: 平板(id: 2)被过滤掉了,因为其库存(30)小于100。
关键要点总结
✅ n8n所有数据都是JSON对象数组 - 每个item都包含一个json键
✅ 节点逐个处理item - 一个表达式应用于每个item
✅ 数据映射是数据流的基础 - 拖拽或表达式都可以实现
✅ 数据转换处理不兼容的格式 - Split Out、Aggregate等节点是你的工具
✅ 代码节点提供强大的灵活性 - Function和Code节点用于复杂操作
✅ 数据固定加速开发 - 避免重复API调用
✅ 项目链接追踪数据来源 - 高级工作流必须理解
✅ 在小规模数据存储使用数据表 - 无需外部数据库
常见问题解答
Q:为什么我的表达式
$json.fieldName返回undefined?A:可能是因为:
$json.parent.childQ:如何同时处理多个来源的数据?
A:使用Merge节点来组合多个节点的输出,然后使用表达式访问每个源的数据。
Q:Split Out和Aggregate有什么区别?
A:Split Out将1个包含列表的item分成多个item;Aggregate将多个item组合成1个。它们是相反的操作。
Q:我能在工作流中存储10GB的数据吗?
A:不能。数据表的默认限制是50MB。使用真实数据库(MySQL、PostgreSQL)来存储大规模数据。
官方文档
n8n系列教程