我正在使用节点红色(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;

10-06 14:57