我正在使用节点红色(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”,“ 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”,“类型”:2,“值”:1,“ tstr”:
“ Integer”},{“ oid”:“ 1.3.6.1.2.1.10.21.1.2.1.1.2.12.30”,“ type”:2,
“ value”:1,1,“ tstr”:“ Integer”},{“ oid”:
“ 1.3.6.1.2.1.10.21.1.2.1.1.2.13.31”,“类型”:2,“值”: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”:“ 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”,“类型”: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
任何的想法?
最佳答案
问题是您的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;