我正在研究节点红(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
任何想法?
答案 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;