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 by选项里选择
- 此时Split节点已经会把
data数组拆成5个独立消息,每个消息的payload是数组元素。如果需要确保是字符串类型,在Split节点后面加一个Change节点:- 设置规则为
Set msg.payload to $string(payload)(用JSONata表达式强制转换为字符串)
- 设置规则为
之前你用Split&Switch拿到整行内容,大概率是因为Split节点没指定正确的数组路径,默认拆分了整个JSON对象,导致输出的是整个对象内容,现在指定payload.data路径就没问题了。
内容的提问来源于stack exchange,提问作者Dany Hovard
相关产品推荐
相关产品推荐

