n8n零基础入门:深入n8n 数据处理机制完全解析

博思AIPPT
    n8n数据处理完全指南:从入门到精通

    在前面的教程中,我们已经掌握了 n8n 的基础操作。今天,我们将深入探讨 n8n 最核心的能力——数据处理机制。这是将简单的工作流升级为强大、智能的自动化系统的关键所在。

    一、数据结构基础:理解 JSON在 n8n 中,所有数据都以JSON(JavaScript Object Notation) 格式在节点之间传递。理解 JSON 是掌握 n8n 数据处理的第一步。1.1 什么是 JSON?JSON 是一种轻量级的数据交换格式,具有易于人类阅读和编写、易于机器解析和生成的特性,是现代网络服务的通用语言。一个典型的JSON结构示例:{
    "name":"张三",
    "age":28,
    "isActive":true,
    "skills": ["Python","JavaScript","n8n"],
    "address": {
    "city":"北京",
    "district":"朝阳区"
    }
    }

    核心概念:

    • 对象{}:包含键值对的无序集合
    • 数组[]:有序的值列表

    1.2 n8n 中的数据流结构在 n8n 中,节点的输出始终是一个项目数组(Array of Items)。即使只有一个结果,也会被包裹在数组中。每个Item是 n8n 中数据的最小单位,它是一个容器,通常包含两个关键部分:

    • json:存放核心的结构化数据
    • binary:存放二进制数据(文件、图片等)

    n8n 节点输出的典型结构:[
    {
    "json": {"id":1,"name":"产品A"},
    "binary": {
    "file": {
    "data":"base64编码的数据",
    "mimeType":"image/png",
    "fileName":"photo.png"
    }
    }
    },
    {
    "json": {"id":2,"name":"产品B"},
    "binary": {
    "file": {
    "data":"base64编码的数据",
    "mimeType":"image/png",
    "fileName":"photo.png"
    }
    }
    }
    ]

    为什么要这样设计?把它想象成一个标准的快递包裹:json键里面装的是信件内容(我们最常用的数据),而包裹里还有一个叫binary的地方,用来装实物附件(如文件、图片)。这种设计让 n8n 能用一套统一的结构处理所有类型的自动化任务。未来如果需要支持第三种数据类型(比如流数据),只需在 Item 里增加一个新的键(比如stream),而不会破坏现有的结构。快捷方式: n8n 提供了$json这个快捷变量,让我们可以直接访问数据,而无需每次都写item.json。二、表达式 (Expressions):与数据对话表达式是 n8n 中用于访问、操作和转换数据的核心工具。在任何输入框中,输入 「{ {」 即可进入表达式模式。2.1和(‘节点名’).json$json:当前正在处理的数据

    • 它是一个快捷变量,代表当前节点正在处理的这一个 Item的 json 数据
    • 当你需要对上一个节点传来的数据进行操作时,直接使用$json
    • 示例:{{ $json.name }}
    n8n零基础入门:深入n8n 数据处理机制完全解析

    $(‘节点名’).json:引用其他节点的数据

    • 这是一个绝对路径引用,用于获取工作流中任意一个前置节点的数据
    • $('节点名'):定位到指定的节点
    • 示例:{{ $('HTTP Request').item.json.data }}
    n8n零基础入门:深入n8n 数据处理机制完全解析

    2.2和items这是另一个极其重要的概念,特别是在进行聚合计算或在 Code 节点中操作时。$item(当前项 – 单数)

    • 代表当前正在处理的单个 Item 容器
    • 它包含两个属性:$item.json$item.binary
    • 关键$json就是$item.json的官方简写,推荐使用$json

    $items(所有项数组 – 复数)

    • 代表流入当前节点的所有 Items 组成的完整数组
    • 当你需要跨多个 Item 进行计算(如求和、计数)或查找时,必须使用它
    • 示例:
      • 获取总项目数:{{ $items.length }}
      • 计算所有订单总额:{{ $items.reduce((sum, item) => sum + item.json.amount, 0) }}
      • 获取所有人的名字:{{ $items.map(item => item.json.name).join(', ') }}

    三、数据映射与转换在实际应用中,从 API 获取的数据结构往往与我们最终需要的格式不一致。这时就需要进行数据映射和转换。3.1 使用 Edit Fields 节点进行简单映射Edit Fields 节点(原 Set 节点)是最常用的数据转换工具,它允许我们新增、修改或重构字段。场景示例:将 API 返回的用户数据:{
    "user_name":"李四",
    "user_email":"lisi@example.com"
    }

    转换为:{
    "姓名":"李四",
    "邮箱":"lisi@example.com"
    }

    操作方法:在 Edit Fields 节点中配置字段映射,将user_name映射为姓名user_email映射为邮箱,即可完成转换。

    n8n零基础入门:深入n8n 数据处理机制完全解析
    n8n零基础入门:深入n8n 数据处理机制完全解析

    3.2 使用 Code 节点进行复杂转换当转换逻辑包含复杂的条件判断或循环时,Code 节点是最佳选择。// $input.all() 获取所有 Items,是 Code 节点中推荐的用法
    constitems = $input.all();

    for(constitemofitems) {
    item.json.status = item.json.age >=18?'成年':'未成年';
    }

    returnitems;

    四、常用函数与变量n8n 表达式内建了丰富的 JavaScript 函数,以下是高频使用的类别:字符串处理

    • .toUpperCase().toLowerCase():大小写转换
    • .slice(0, 10):截取字符串
    • .replace('a', 'b'):替换字符
    • .split(','):分割字符串

    数组处理

    • .length:获取数组长度
    • .join(','):数组转字符串
    • .map():遍历转换
    • .filter():筛选过滤
    • .reduce():聚合计算
    • .find():查找元素

    日期时间处理

    • {{ new Date().toISOString() }}:ISO 格式时间
    • {{ Date.now() }}:当前时间戳

    条件判断(三元运算符

    • {{ $json.score >= 60 ? "及格" : "不及格" }}

    数学运算

    • Math.round():四舍五入
    • .toFixed(2):保留小数位

    五、实战案例:处理复杂 API 订单数据接下来,我们通过一个实战案例来巩固所学知识。业务场景:从 API 获取一批订单,筛选出金额大于 500 的订单,并将其中的商品信息和购买人整合输出。API返回的原始数据{
    "code":200,
    "data": {
    "orders": [
    {
    "order_id":"ORD20231001",
    "customer_name":"王五",
    "items": [
    {"product":"商品A","qty":2,"price":99.5},
    {"product":"商品B","qty":1,"price":199}
    ],
    "status":1
    }
    // ... 更多订单
    ]
    }
    }

    工作流设计整个工作流包含 5 个关键步骤:

    n8n零基础入门:深入n8n 数据处理机制完全解析

    (1)HTTP Request 节点请求本地的接口地址http://127.0.0.1:8000/api/orders,返回模拟的订单数据。这里有 2 个订单,都在orders数组对象中。

    n8n零基础入门:深入n8n 数据处理机制完全解析

    (2)Split Out 节点Split Out 是 n8n 中用于拆分数据的专用节点。它的核心功能是:将一个 item 中的数组字段拆分成多个独立的 items。每个订单都处在orders的数组里,而且整个数据作为一个单独的 Item 流动,这不方便我们后续对每个订单进行单独判断和处理,所以需要拆分。执行拆分后,数据流发生了质变:原本的 1 个 Item 变成了 2 个独立的 Items,每个 Item 就是一个完整的订单信息。

    n8n零基础入门:深入n8n 数据处理机制完全解析

    (3)Edit Fields 节点(数据整理)原始的订单数据比较杂乱,我们需要整理一下,并计算出一些新的、有用的信息,比如每个订单的总金额。使用 Edit Fields 节点,这个节点会对流入的每一个 Item 执行相同的操作。我们增加了三个字段:

    • 订单总金额{{ $json.items.reduce((sum, item) => sum + item.qty * item.price, 0) }}
    • 商品清单{{ $json.items.map(item => item.product).join(',') }}
    • 订单状态{{ $json.status === 1 ? '已完成' : '待处理' }}

    勾选「Include Other Input Fields」保留已存在的字段,新增字段会一并添加进去。

    n8n零基础入门:深入n8n 数据处理机制完全解析

    (4)IF 节点(条件过滤)我们的目标是只关心金额超过 500 元的订单。现在需要设置一个条件,不符合条件的直接拦截。配置条件:{{ $json.订单总金额 > 500 }}筛选后,只有满足条件的订单会继续流向下一个节点。

    n8n零基础入门:深入n8n 数据处理机制完全解析

    (5)Edit Fields 节点(最终输出)对于满足条件的每个订单,我们格式化信息来输出:{
    "客户":"{{ $json.customer_name }}",
    "订单号":"{{ $json.order_id }}",
    "总金额":"{{ $json.订单总金额 }}",
    "商品":"{{ $json.商品清单 }}",
    "状态":"{{ $json.订单状态 }}"
    }

    n8n零基础入门:深入n8n 数据处理机制完全解析

    六、进阶技巧与最佳实践在实际使用 n8n 进行数据处理时,以下技巧能帮助你更高效地构建工作流:6.1 合理使用节点类型

    • 简单字段映射:优先使用 Edit Fields 节点,可视化操作更直观
    • 复杂逻辑处理:使用 Code 节点,充分发挥 JavaScript 的灵活性
    • 条件分支:使用 IF 或 Switch 节点,让数据流向更清晰

    6.2 调试技巧

    • 善用节点的「执行」按钮,逐步调试每个节点的输出, 主要是用于后面方面鼠标拖动节点的数据,不需要输入
    • 在 Code 节点中使用console.log()输出中间结果
    • 利用表达式编辑器的预览功能,实时查看表达式结果

    七、总结通过这篇教程,我们系统地学习了 n8n 数据处理的核心机制:

    • 数据结构:理解 JSON 和 n8n 的 Item 结构
    • 表达式系统:掌握、item、$items 的使用场景
    • 数据转换:学会使用 Edit Fields 和 Code 节点进行数据映射
    • 实战应用:通过订单处理案例巩固所学知识

    掌握这些基础内容后,我们将能够轻松自如地处理各种复杂的数据场景,从而构建更加强大和智能的自动化工作流。

    © 版权声明

    相关文章