在节点红色中我使用“收集器”收集值,当收集其中一个时,收集器向我发送一个包含所有值对的“对象”:
{ "mqtt/1/": "-127.00", "mqtt/0/": "41.94" }
用“json”和“stringsplit”之后我得到了一个f.e数组。 9个值: array [9](最多可以有80对值)!
[ "{", "mqtt/1/", ":", "-127.00", ",", "mqtt/0/", ":", "41.61", "}" ]
现在我想要一个函数节点,它将Topic(mqtt / 1 /)中的Value(-127.00)与Topic(mqtt / 0 /)中的Value(41.61)进行比较。 这个我工作......但是只有当我知道哪个是第一个主题/值,哪个是第二个......
var outputMsgs = msg.payload;
var top1=outputMsgs[1];
var val1=outputMsgs[3];
var top2=outputMsgs[5];
var val2=outputMsgs[7];
msg = {payload: val1}
var msg2 = {payload: val2}
if (val1>val2)
{var msgOUT={payload: "BIGGER"};}
return [msg, msg2, msgOUT];
但问题是,有时“mqtt / 1 /”首先出现,有时是“mqtt / 0 /”并且值会被切换。所以现在,也许有人可以帮助编写一个函数,用正确的主题选择正确的值,以便在下一步中对它们进行比较。
如果主题包含0,1 ... 80,然后按顺序将其保存在数组中,可能有一种方法可以查看???
提前谢谢!
答案 0 :(得分:1)
如果初始msg.payload
确实是您描述的javascript对象,即:
msg.payload = { "mqtt/1/": "-127.00", "mqtt/0/": "41.94" }
然后您可以将这两个值引用为:
var value1 = msg.payload["mqtt/1/"];
var value1 = msg.payload["mqtt/2/"];
如果msg.payload
实际是JSON字符串,则首先通过JSON节点传递消息,然后将其转换为对象。
无需尝试自己拆分字符串并解析内容。