仅显示节点红色中 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;
我正在处理红色节点 (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;