2016-06-22 24 views
0

Ich arbeite am Knoten rot (SNMP).Anzeige nur Wertfelder aus dem msg.payload in Knoten rot

Wenn ich einsetzen, ich habe die folgende Ausgabe:

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

so möchte ich von diesem Ausgang alle Werte angezeigt werden (104, 104, 1, 1 ....)

ich schreibe diese Funktion:

for(var i =0; i<Object.keys(msg.payload).length;i++) 
{ 
    msg.payload+=msg.payload[Object.keys(msg.payload)[i]].value; 
} 
return msg; 

aber ich habe einen Fehler:

TypeError: Object.keys called on non-object

keine Idee?

Antwort

1

Das Problem ist, dass Ihre for Schleife bei jeder Iteration msg.payload ändert - und weil es eine += tut es macht es in eine Zeichenfolge. Das bedeutet, dass das zweite Mal durch die Schleife, msg.payload ist nicht mehr das Objekt, das es am Anfang war, so dass der Object.keys Aufruf fehlschlägt.

Sie sollten Ihr Ergebnis in einer neuen Variablen aufzubauen und setzen msg.payload am Ende:

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

Dank viel. Es klappt – aline