Node-Red有问题解析有效负载数据

时间:2018-04-05 20:27:00

标签: javascript node-red

我已经成功运行节点红色并从几个不同的PLC系统中提供它,

我有这样的有效载荷。

{"d":779,"dt":3,"ts":"2018-04-05T19:54:12.930758Z","q":18}

字段会分解为。

d=779  dt=3  ts=2018-04-05T19:54:12.930758Z  q=18

我一直试图解析字符串并将其分解(即使只是一个字段" d")。
我一直在尝试使用splice和split的组合来编写一个解析数据的函数。

有没有人有这个简单的解决方案?我甚至使用正确的节点进程吗?

我知道这完全没有用,但这是尝试读取第一个字段。它没有填充,因此需要从冒号开始,以逗号结束。

var str = msg.payload;
var th = str.slice(5,-1); 
th = th.split(",");
msg.payload[0] = parseFloat(th[0]);
return [ msg.payload[0]]; 

拥有源MQTT缓冲区:

[123,34,100,34,58,51,48,54,56,44,34,100,116,34,58,50,44,34,116,115,34,58,34,50,48,49,56,45, 48,52,45,49,50,84,48,56,58,53,48,58,49,56,46,49,54,50,48,48,48,90,34,44,34,113, 34,58,49,57,50,125,0]

最后的零显然是违规的价值:

我试图用功能

删除它
var data = msg.payload;
console.log("payload data: length = " + data.length);
data = data.trim();
console.log("trimmed data: length = " + data.length);

msg.payload = JSON.parse(data);
return msg;

现在我遇到TypeError:data.trim不是函数

Flow看起来像: enter image description here 现在得到

谢谢, 凯文

1 个答案:

答案 0 :(得分:0)

默认情况下,大多数节点都将输出一个JSON对象,因此不需要将其解析为字符串,只是直接访问对象值,例如。

var d = msg.payload.d;

如果节点是JSON的输出字符串表示,那么您应该使用内置的JSON节点在访问值之前将msg.payload中的字符串转换为JSON对象。

enter image description here

此外,您需要从函数节点返回一个完整的JSON对象,而不仅仅是一个字符串(或一个字符串数组)

所以,如果你只想传递它的d值应该是:

var d = msg.payload.d;
msg.payload = d;
return d;