- n8n 工作流核心数据结构——整体思路、JSON结构
- 节点(Node)、连线(Connection)、执行上下文等对象
- n8n 如何存储和调度这些结构
- 简单示例JSON分析
一、JSON顶层结构 一般包含如下主要字段:
- name:工作流名称
- nodes:节点数组,每一个节点代表执行中的一个步骤
- connections:描述节点之间的连线关系
- active:是否激活
- settings:全局设置
- id/createdAt/updatedAt:数据库相关元数据
接下来,我们进一步拆解 nodes 和 connections 这两个关键对象的结构细节,为后续深入分析打下基础。
我分别详细拆解 n8n 核心的 nodes 和 connections 数据结构:
(一)nodes(节点)结构拆解 每个节点对象有以下典型属性:
- name:节点名称(如 Http Request1)
- type:节点类型(如 httpRequest、set、function 等)
- typeVersion:类型版本
- position:节点在可视化画布上的坐标,比如 [x, y]
- parameters:该节点的所有执行参数(表单配置项),如请求URL、方法、头部等
- credentials:若节点需要鉴权,则此字段存放账户信息引用
- disabled:布尔值,标记节点是否被禁用
- notes、color 等:备注和自定义颜色
- id:节点的唯一标识符(可能在新版 n8n 中存在)
(二)connections(连线)结构拆解 connections 对象自顶向下结构:
- key(节点名或 id): 以节点名或 id 作 key
- 值为对象:表示出发连线
- 通常有 main 属性(代表主流程),如: "connections": { "A": { "main": [ [ { "node": "B", "type": "main", "index": 0 } ] ] } }
- main 数组里的每一项是一个对象,指定连向哪个节点、连线类型、连线序号
接下来,我将会通过一个典型的 n8n 工作流 JSON 片段,结合上述字段,把静态结构映射到实际逻辑流转上
【例子】假如有一个简单的工作流:节点 A(读取数据)、节点 B(加工数据)、节点 C(写出数据)。它的 JSON 结构主要片段大致如下:
{
"nodes": [
{
"parameters": { ... },
"id": "A",
"name": "Read Data",
"type": "readData",
"typeVersion": 1,
"position": [200, 300]
},
{
"parameters": { ... },
"id": "B",
"name": "Process Data",
"type": "processData",
"typeVersion": 1,
"position": [400, 300]
},
{
"parameters": { ... },
"id": "C",
"name": "Write Data",
"type": "writeData",
"typeVersion": 1,
"position": [600, 300]
}
],
"connections": {
"A": { "main": [ [ { "node": "B", "type": "main", "index": 0 } ] ] },
"B": { "main": [ [ { "node": "C", "type": "main", "index": 0 } ] ] }
}
}
【解析】
- 工作流启动时,n8n 会从无入口依赖的节点(如 A)开始执行,A 执行完后,connections 决定流向 B,然后 B 再流向 C。
- connections 字段用节点 id/name 作为 key,value 指定当前节点 main 输出流连向哪个下游节点,即 B、C。
- n8n 的调度器在执行过程中会解析整个节点网络,有条件、分支等复杂情况时会根据定义动态决定实际走向。
下一步,我们需要引入执行上下文(如每个节点的输入、输出数据,状态、运行环境等),进一步揭示 n8n 底层执行流程,包括数据如何在节点间流动、临时状态如何隔离管理,进而更好理解它的执行引擎设计。
总结 n8n 工作流引擎的数据结构及其底层调度和数据流本质:
-
节点与连线的数据结构
- n8n 的工作流是以 JSON 格式存储的,核心为 nodes(节点对象)和 connections(连线关系)。每个节点包含类型、参数、凭证、坐标等属性。connections 则清晰记录了流程执行顺序和依赖关系。
-
执行上下文(Execution Context)
- 每个节点执行时都会生成独立的上下文对象。核心包括:
- inputData:当前节点要消费的输入数据(通常为上游节点的输出,数组结构,支持多分支合并)
- outputData:本节点执行后的产出,传递给下游节点
- item:n8n 内部的最小数据单元(一个 JSON 对象),节点间流转的数据本质是 item 数组
- nodeExecutionStack:维护当前 workflow 的节点执行活动栈
- runExecutionData & workflowData:负责保存本轮 workflow 的全局状态、变量等
- 每个节点执行时都会生成独立的上下文对象。核心包括:
-
数据隔离与传递机制
- 节点执行时依赖于输入数据,但每个节点的数据作用域局部且自洽。下游节点总是依赖上游节点设定的输出。
- 对于有条件分支、合并节点和循环节点,n8n 通过 connections 和上下文中的专有机制(如 loop item 分发)确保数据不混淆。
-
失败/重试与日志
- 节点在执行失败时,上下文会标记错误信息,支持日志记录(如 execution error、运行详情)
- n8n 引擎有自动重试、捕获等处理机制,允许 workflow 管理员查看历史运行数据、输入输出快照,便于后续追踪和修复
-
底层本质
- n8n 工作流本质上就是“节点有向有序图”的对象化表示,所有节点与连接都是运行时动态解析,数据流严格按照节点拓扑关系分发与流转,且每次执行都充分利用隔离的上下文追溯输入输出、失败、状态等,实现稳定、可靠的自动化调度。