仅显示节点红色中 msg.payload 的值字段

display only value fields from the msg.payload in node red

我正在处理红色节点 (SNMP)。

部署时,输出如下:

[ { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.1.26", "type": 2, "value": 104, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.2.27", "type": 2, "value": 104, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.10.28", "type": 2, "value": 1, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.11.29", "type": 2, "value": 1, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.12.30", "type": 2, "value": 1, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.13.31", "type": 2, "value": 1, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.14.32", "type": 2, "value": 101, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.15.38", "type": 2, "value": 1, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.100.39", "type": 2, "value": 101, "tstr": "Integer" }, { "oid": "1.3.6.1.2.1.10.21.1.2.1.1.2.101.40", "type": 2, "value": 101, "tstr": "I ....

所以我想显示此输出的所有值(104、104、1、1 ....)

我正在写这个函数:

for(var i =0; i<Object.keys(msg.payload).length;i++)
{  
  msg.payload+=msg.payload[Object.keys(msg.payload)[i]].value;
}
return msg;

但我有一个错误:

TypeError: Object.keys called on non-object

有什么想法吗?

问题是您的 for 循环在每次迭代时都在修改 msg.payload - 因为它正在执行 +=,所以它正在将其转换为字符串。这意味着第二次循环时,msg.payload 不再是开始时的对象,因此 Object.keys 调用失败。

你应该在一个新变量中建立你的结果并在最后设置 msg.payload:

var result = [];
var keys = Object.keys(msg.payload);
for(var i =0; i<keys.length;i++)
{  
  result.push(msg.payload[keys[i]].value);
}
// At this point, result is an array of the values you want
// You can either return it directly with:
//    msg.payload = result;

// or, if you want a string representation of the values as a
// comma-separated list:
//    msg.payload = result.join(", ");

return msg;