2016-06-22 2 views
0

Я работаю над узлом red (SNMP).отображают только поля значений из сообщения msg.payload в узле red

Когда я раскрываю, я ниже выход:

[ { "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

любая идея?

ответ

1

Проблема в том, что ваш цикл 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; 
+0

спасибо большое. Оно работает – aline

Смежные вопросы