数据格式转换:如何在 n8n 中实现 JSON Object 与 String 的相互转换?

2026-01-24 16 0

场景导入:那个让你抓狂的 "Unexpected token u"

兄弟们,搞自动化最崩溃的瞬间是啥?对笔者来说,不是服务器宕机,也不是 API 限流,而是那句经典的报错:Unexpected token u in JSON at position 0

这通常发生在一个节点需要 JSON 对象,但传过来的却是字符串的时候。比如,你从 HTTP Request 拿到一个 API 响应,想用 Set 节点提取某个字段,结果死活提取不出来,或者直接报错。为什么?因为你拿到的是 "{"name": "n8n"}" 这种字符串,而不是 {name: "n8n"} 这种对象。

在 N8N大学,我们不写那些“正确但没用”的废话。今天学长就手把手教你,如何在 n8n 里丝滑地搞定 JSON Object(对象)和 String(字符串)的互转,彻底治好你的格式焦虑。

核心实操:掏出你的 "瑞士军刀"—— Code 节点

虽然 n8n 里有很多节点都能处理数据,但在处理格式转换这种“脏活累活”时,最强的工具永远是 Code 节点。它就像一把瑞士军刀,能让你用 JavaScript 把数据揉碎了再重塑。

笔者见过很多新手试图用复杂的表达式(Expression)去硬磕,结果把自己绕晕。听我的,直接上 Code 节点,清晰明了。

步骤一:JSON Object 转 String (序列化)

场景:你从数据库或 API 获取了一堆结构化数据(对象),需要把它作为纯文本发给钉钉机器人,或者存入一个只支持文本的字段。

操作指南:

  1. 在你的工作流中,添加一个 Code 节点。
  2. 连接上你的上游节点(比如 HTTP Request 或 Set)。
  3. 在 Code 节点的“JavaScript Code”框里,输入以下代码:
// 假设上游数据在 $json 中
const originalData = $json;

// 使用 JSON.stringify 将对象转换为字符串
const jsonString = JSON.stringify(originalData);

// 输出结果,必须返回一个对象
return { json: { stringData: jsonString } };

这样一来,无论上游传过来多么复杂的对象,输出端都会得到一个干净的 stringData 字符串。

步骤二:String 转 JSON Object (反序列化)

场景:这是最高频的踩坑点。你收到一个 Webhook,里面夹带的数据是字符串格式的 JSON;或者上游节点不小心把对象变成了字符串。你需要把它转回对象,才能在后续节点中正确读取字段。

操作指南:

同样使用 Code 节点,代码如下:

// 假设上游传来的字符串字段名叫 "dirtyString"
const rawString = $json.dirtyString;

let parsedObject;

try {
    // 尝试解析字符串
    parsedObject = JSON.parse(rawString);
} catch (error) {
    // 如果解析失败(比如字符串格式不对),为了不让整个工作流断掉,建议返回原值或错误提示
    console.error("JSON 解析失败:", error);
    parsedObject = { error: "格式转换失败", original: rawString };
}

return { json: parsedObject };

学长提醒: 这里一定要加 try...catch。在自动化流程中,数据脏一点是常态,如果不加捕获,一个坏掉的字符串就能让你整个工作流“红灯”挂掉。

进阶技巧:其实不用写代码?

有些同学可能会问:“学长,我写代码有点虚,有没有纯 UI 的解法?”

还真有。在 n8n 的 Set 节点(或者 Function Item 节点)中,利用 n8n 的 表达式(Expression) 也能完成简单的转换。

  • 转 String: 在 Set 节点的 Value 栏,直接写 {{ JSON.stringify($json.yourObject) }}
  • 转 Object: 在 Set 节点的 Value 栏,直接写 {{ JSON.parse($json.yourString) }}

这种方法适合简单的一对一转换。但如果你需要对数据进行清洗、过滤或者嵌套循环,老老实实回到 Code 节点,那是更优解。

避坑指南:90% 的报错都源于此

笔者在 N8N大学 混了这么多年,见过太多人在格式转换上栽跟头。这里分享两个最致命的细节:

  1. 隐藏的空格和双引号: 有时候你以为拿到的是 JSON String,其实它外面还套了一层单引号,或者首尾有空格。在解析前,先用 trim() 去除空格是个好习惯。
  2. 混淆了“键”和“值”: 在 Code 节点输出时,一定要搞清楚你要返回的是什么。如果你返回 { json: { data: $json } },下游节点读取时要用 {{ $json.data.name }}。如果你直接返回 { json: $json },下游就直接读 {{ $json.name }}。结构搞乱了,数据就全乱了。

FAQ 问答

Q1: 为什么我的 Code 节点输出了,但下游节点读不到数据?
A: 检查 Code 节点的返回格式。必须是 { json: { ...你的数据... } } 这种结构。如果你返回的是 { key: 'value' },n8n 是不认的,它会认为你没有输出 JSON 数据。

Q2: 如果我要转换的是数组格式的字符串,方法一样吗?
A: 完全一样。JSON.stringify()JSON.parse() 对数组和对象是一视同仁的。数组本质也是一种对象。

Q3: 有没有比 Code 节点更快的转换方式?
A: 如果是简单的 Object 转 String,建议直接在下游节点的“表达式”里处理,这样可以减少一个节点的开销,执行效率更高。但复杂的逻辑处理,还是必须用 Code 节点。

总结与资源

数据格式转换是 n8n 自动化里的“基本功”。掌握好 JSON.stringify()JSON.parse() 这两个原生方法,配合 Code 节点,你就能解决 99% 的格式不匹配问题。

在 N8N大学,我们始终相信:搞技术不是为了炫技,而是为了把复杂的事情变简单。希望这篇干货能帮你解决实际问题。

如果你在实操中遇到了更奇葩的格式问题,欢迎在评论区留言,学长在线帮你排忧解难!

相关文章

n8n Error Handling 节点报错太心烦?试试这些更灵活的替代方案
n8n 节点报错了?用 Error Handling 让它自动重试并通知你
n8n Wait节点在数据同步中的延迟控制实战
n8n Wait节点免费版:我能用它实现定时任务吗?
n8n Error Handling节点:当自动化流程“翻车”时,如何让它自动“扶起来”?
n8n Error Handling节点报错常见问题解决

发布评论