Node-RED中如何按JSON Payload的Value类型分流处理传感器数据
Node-RED 传感器数据消息分流实现方案
需求说明
传感器返回的JSON数据中,value字段存在三种类型:double数值、布尔值、字符串。需要按以下规则分流:
- 数值类型(含double、布尔):发送至数值处理节点
- 普通字符串类型(非"OFF"/"STARTING"):发送至字符串处理节点
- 特殊字符串"OFF"/"STARTING":发送至单独的特殊处理节点
示例输入数据:
[ { "tag": "Wind/7865", "value": 24.82145623328888 }, { "tag": "AC 3 Phase/7995", "value": true }, { "tag": "AC 3 Phase/7847", "value": "OFF" }, { "tag": "AC Generator/7849", "value": "STARTING" } ]
实现方法
方法1:使用Function节点(推荐,灵活处理特殊逻辑)
添加一个Function节点,编写以下代码实现多分支输出:
const value = msg.payload.value; const valueType = typeof value; // 优先处理特殊字符串 if (valueType === 'string') { if (value === 'OFF' || value === 'STARTING') { msg.topic = 'special_string'; return [null, null, msg]; // 输出2对应特殊处理分支 } else { msg.topic = 'normal_string'; return [null, msg, null]; // 输出1对应普通字符串分支 } } else if (valueType === 'number' || valueType === 'boolean') { msg.topic = 'numeric_boolean'; return [msg, null, null]; // 输出0对应数值/布尔分支 } else { // 其他未定义类型,可按需处理,此处直接丢弃 return null; }
配置Function节点的输出数量为3个,分别连接到对应的后续处理节点即可。
方法2:使用Switch节点
通过多重条件判断实现分流:
- 第一个条件:
typeof msg.payload.value === "string" && (msg.payload.value === "OFF" || msg.payload.value === "STARTING"),匹配后发送至特殊处理节点 - 第二个条件:
typeof msg.payload.value === "string",匹配后发送至普通字符串处理节点 - 第三个条件:
typeof msg.payload.value === "number" || typeof msg.payload.value === "boolean",匹配后发送至数值处理节点
注意开启Switch节点的「允许多个匹配」选项,确保特殊字符串不会被第二个条件重复匹配。
内容的提问来源于stack exchange,提问作者Masterbuilder
相关产品推荐
相关产品推荐

