新手噩梦?一文读懂 n8n 中的 JSON 数据结构与表达式 (Expressions) 引用

2026-01-18 12 0

新手噩梦?其实是你的“导航地图”没拿对

笔者在 N8N大学 社区里潜水多年,发现很多新同学刚上手 n8n 时,都会经历一个“至暗时刻”:明明逻辑跑通了,数据也返回了,但就是不知道怎么把“上一步”的数据,“搬运”到“下一步”的输入框里。

看着满屏的 {{ JSON }},或者那个让人又爱又恨的 $json,是不是感觉像在看天书?别慌,这不是你笨,是 n8n 的数据交互逻辑确实稍微绕了个弯。今天,笔者就带你把 n8n 的 JSON 数据结构表达式 (Expressions) 彻底盘明白。

这不仅是技术扫盲,更是帮你跨过新手期的“生死坎”。

一、 万物皆对象:n8n 的数据“快递盒”

在 n8n 的世界里,数据不是乱塞的,它是被装在一个个标准的“快递盒”里传递的。这个盒子,就是 JSON

当你运行一个工作流,每个节点执行完后,都会把结果打包成一个 JSON 对象,传给下一个节点。这个对象通常包含三个核心部分(你可以通过点击节点查看 JSON 选项卡来验证):

  • $json:这是核心中的核心。它包含了 API 返回的原始数据、Excel 的行数据、Webhook 发来的报文体等。
  • $headers:如果涉及 HTTP 请求,这里存放的是响应头信息。
  • $różni:这部分略显复杂,通常包含节点执行状态、时间戳等元数据。新手阶段,我们 90% 的操作都在跟 $json 打交道。

笔者提示: 你可以把 $json 想象成快递盒里的“主货物”,而 $headers 是贴在盒子外面的“快递单”。

二、 表达式 (Expressions):你的“自动搬运工”

知道了数据存在 $json 这个“盒子”里,下一步就是怎么把它拿出来。这就是 表达式 的工作。

在 n8n 的任何输入框(如 HTTP Request 的 Body,Set 节点的 Value),只要按下快捷键 Ctrl + Space (Mac 是 Cmd + Space),就会弹出一个“万能菜单”。

表达式的通用语法是:{{ $json.字段名 }}{{ $json["字段名"] }}

举个最典型的场景:你用 HTTP Request 请求了一个用户列表,返回如下:

{
  "code": 200,
  "data": {
    "users": [
      { "id": 101, "name": "张三" },
      { "id": 102, "name": "李四" }
    ]
  }
}

如果你在下一个节点想引用“张三”这个名字,路径就是:{{ $json.data.users[0].name }}。这就是在 JSON 结构中逐级“钻取”的过程。

三、 新手必懂的几种引用场景

1. 简单的“平级”引用

如果数据是扁平的,比如 {"user": "n8n"},直接在下个节点写 {{ $json.user }} 即可。这是最简单的。

2. 嵌套对象的“钻取”

如果数据是多层嵌套的,比如上面的 users,你需要用点号 . 一层层剥开。如果遇到数组(比如那个中括号 []),你必须指定索引,比如 [0] 取第一个,[1] 取第二个。

避坑点: 如果你不确定数组里到底有几个元素,想全部提取,通常需要配合 Split Out 节点或者 Set 节点来做循环处理,而不是硬写索引。

3. 甚至可以“运算”

表达式不仅能取值,还能做简单的数学计算。比如你想把两个数字相加:

{{ $json.price * $json.quantity }}

这在处理金额计算、数据格式化时非常有用。

四、 笔者的“避坑指南”:为什么我的表达式报错了?

在 N8N大学 的交流群里,这三大坑是高频出现的:

1. 键名包含特殊字符或空格

如果你的 JSON 键名是 First Name(带空格),用点号语法 $json.First Name 是会报错的。这时候必须用中括号语法,并加引号:

正确写法:{{ $json["First Name"] }}

2. 数据类型不匹配

你想做加法,但某个字段其实是字符串格式(比如 "100")。这时候你需要先转换类型:

写法:{{ Number($json.price) + Number($json.tax) }}

3. 找不到字段(Undefined)

这通常是因为你引用的节点路径不对。请务必检查左侧的节点面板,确认你引用的是“上一步”执行成功的节点数据。建议使用 Set 节点来中转数据,这样路径会非常清晰。

五、 进阶技巧:善用 Data Structuring

当你拿到的数据是一坨乱麻(比如 API 返回了一个巨大的 Map 结构),n8n 自带的 JSON 节点其实是你的好帮手。

JSON 节点中,你可以选择 Convert to String/JSON,或者使用 Resolve 操作。但更常用的是 Set 节点,通过它你可以重命名字段,或者手动构建一个新的 JSON 结构,让下游节点引用起来更方便。

笔者的建议是:**不要试图让表达式变得太复杂**。如果一个表达式里写了太多层级的钻取,不如在中间加一个 Set 节点,先把需要的数据“拍平”,再传给下一步。这叫“数据预处理”,能极大降低后期维护的难度。

FAQ:新手常问的 3 个问题

Q1: 为什么我在输入框里看不到预览值,只有黄色的变量名?
A: 这是 n8n 的正常现象。黄色代表这是一个表达式。如果你输入的是纯文本,它就是灰色的。点击运行(Test step)后,如果配置正确,黄色框旁边会显示实际抓取到的值。

Q2: $json$item 有什么区别?
A: 简单说,$json 是当前数据项的内容;$item 是获取特定索引的数据项。在简单的单线流程中,$json 足够用了。但在“合并”或“循环”模式下,你可能需要用到 $item(i) 来指定取第几条数据。

Q3: 如果我想引用的字段名是 n8n 的保留字怎么办?
A: 比如字段叫 nodejson,直接用点号可能会解析混乱。此时请统一使用 {{ $json["node"] }} 这种中括号形式,这是最稳妥的写法。

总结与资源

掌握了 JSON 结构和表达式引用,你就相当于掌握了 n8n 的“语言”。这看起来有点枯燥,但它是通往自动化高手的必经之路。

在 N8N大学,我们始终相信:**只要数据流得通,逻辑再复杂都能拆解**。下次遇到引用问题,试着打开 JSON 面板,对照着层级结构,用 Ctrl + Space 慢慢拼出你的路径吧!

如果你觉得这篇文章帮到了你,欢迎收藏 N8N大学 (n8ndx.com),更多硬核实操指南正在路上。

相关文章

寻找免费的 Zapier 替代品?深度解析 n8n 社区版为何是最佳选择
不只是 n8n!2025年值得关注的 5 款开源自动化工具推荐与评测
省钱攻略:如何将 Zapier 自动化工作流无缝迁移到 n8n?
防止数据丢失:n8n 工作流与凭证(Credentials)的自动备份方案
Node.js 开发者首选:使用 npm 全局安装 n8n 及 PM2 进程守护教程
本地部署痛点解决:配合 Cloudflare Tunnel 实现 n8n 外网远程访问

发布评论