You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED中如何用Function/Split&Switch节点提取JSON对象值

Node-RED 提取JSON数组元素为单独字符串消息的解决方案

我来帮你搞定这个Node-RED里的提取问题!之前我也踩过类似的坑,不管是用Function节点还是Split组合节点,关键是找对处理数组和类型转换的方式,下面给你两种可行的方案:

方案一:用Function节点拆分并转换为字符串

如果你的解析后JSON结构类似 { "data": ["Z29vZGJ5ZQ==", "xxx", "xxx", "xxx", "xxx"] }(包含长度为5的data数组),可以在Function节点里写这段代码,直接把数组里的每个元素转成字符串并单独输出:

// 遍历data数组的每个元素
msg.payload.data.forEach(item => {
    // 将每个元素转为字符串,作为单独的消息发送
    node.send({ payload: String(item) });
});
// 返回null,避免额外发送原消息
return null;

执行后,Function节点会输出5个独立的消息,每个消息的payload都是字符串形式的数组元素(比如你要的Z29vZGJ5ZQ==),而不是整个数组。

方案二:用Split+Change节点组合

如果你更倾向于用内置节点而非代码,调整Split节点的配置就能解决你之前拿到整行内容的问题:

  • 首先确保你的JSON已经通过JSON节点解析完成,输出的msg.payload是包含data数组的对象。
  • 添加Split节点,配置如下:
    • 在Split by选项里选择JSON array
    • 在Path里填写payload.data(指定要拆分的数组路径)
  • 此时Split节点已经会把data数组拆成5个独立消息,每个消息的payload是数组元素。如果需要确保是字符串类型,在Split节点后面加一个Change节点:
    • 设置规则为Set msg.payload to $string(payload)(用JSONata表达式强制转换为字符串)

之前你用Split&Switch拿到整行内容,大概率是因为Split节点没指定正确的数组路径,默认拆分了整个JSON对象,导致输出的是整个对象内容,现在指定payload.data路径就没问题了。

内容的提问来源于stack exchange,提问作者Dany Hovard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:28:33