n8n中$json与$items()的关键区别:实际应用中的差异(2026-07-06)
如果你刚开始使用n8n进行自动化工作流,一定会遇到两个看起来很相似的概念:$json 和 $items()。不少人第一次都会搞混——实际上,它们的使用场景和返回数据的方式完全不同。理解这一点,能让你避免很多“数据出不来”的尴尬。
它们到底是什么?
$json:当前节点的“单项快照”
$json 是一个对象,代表当前节点正在处理的那一条数据。
例如,你从一个HTTP请求节点获取了用户数据,该节点返回了5条记录。在下一个节点的“Set”或“Function”中,$json 就是这5条记录中的某一条。它就像照片,只反映当前这一瞬间、这一条数据的结构。
$items():上一节点的“完整档案”
$items() 是一个数组,包含来自上一个节点(或指定节点)的所有数据条目。
还是那个HTTP请求,有5条数据。用 $items() 你得到的是一个由5个对象组成的数组。它就像一卷胶卷,包含了每一帧。
一个真实案例:批量更新用户
假设你有一个工作流要批量更新用户邮箱,数据来自一个“获取用户列表”的HTTP节点。
情景一:错误使用 $json
// 在HTTP节点后的“Set”节点中,使用表达式
{{ $json.email }}
如果你这样写,它只会读取当前正在处理的这1条邮件的值,其他4条不会被更新。结果:只更新了1个人。
情景二:正确使用 $items()
// 在下一个“Function”节点中
const items = $items();
for (const item of items) {
console.log(item.json.email); // 5个人的邮箱全部输出
}
结果:5个人全部更新成功。
实用建议:如何选择?
| 场景 | 推荐使用 | 原因 |
|---|---|---|
| 只想获取当前这一条数据的某个字段 | $json |
简单直接,代码更短 |
| 需要遍历上一步的所有结果进行批量处理 | $items() |
唯一能访问所有数据的方式 |
| 在“代码”或“Function”节点中做条件判断 | $items() |
你可以先过滤数组,再取其中一条使用 |
| 在表达式输入框(如设置字段值) | $json |
因为表达式默认只处理当前项 |
一个能立即用上的技巧
如果你在“Code”节点中不确定当前有哪几条数据,可以这样调试:
// 打印出所有项的数量
console.log('当前一共有 ' + $items().length + ' 条数据');
// 打印第一条数据的全部字段名
console.log(Object.keys($items()[0].json));
这能帮你快速确认数据结构,不用再反复手动加“console节点”了。
行动号召
今天就去你的n8n工作流中检查一遍: 把那些你之前用 $json 处理批量数据的地方,尝试改成用 $items() 加循环来处理。你会发现错误率大降,自动化真正跑得又稳又快。别犹豫,动手试一次,比看十篇文章都有效。
免责声明:本文中的案例和结论基于撰写时(2026-07-06)的n8n稳定版本。n8n持续更新中,部分API或节点行为可能随版本变化而调整。请在升级或部署至生产环境前进行充分测试。本文作者不对因遵循本文建议而导致的任何工作流错误或数据丢失承担责任。