仅显示节点红色

时间:2016-06-22 06:44:34

标签: javascript node.js snmp net-snmp node-red

我正在研究节点红(SNMP)。

部署时,我的输出如下:

  

[{“oid”:“1.3.6.1.2.1.10.21.1.2.1.1.2.1.26”,“type”:2,“value”:    104 ,“tstr”:“整数”},{“oid”:“1.3.6.1.2.1.10.21.1.2.1.1.2.2.27”,“类型”:2,“值” : 104 ,   “tstr”:“整数”},{“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”:   “整数”},{“oid”:“1.3.6.1.2.1.10.21.1.2.1.1.2.12.30”,“类型”:2,   “value”: 1 ,“tstr”:“整数”},{“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”,“类型”:2,“值”: 1 ,   “tstr”:“整数”},{“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”,“类型”:2,“值”: 101 ,   “tstr”:“我......

所以我想显示此输出中的所有值(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

任何想法?

1 个答案:

答案 0 :(得分:2)

问题是你的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;