web-dev-qa-db-ja.com

node-redがjson文字列をmsg.payloadに解析する

Noobの質問

Oidリストを介してデータを収集するために、snmp関数を使用しています。データを抽出し、json関数を使用してデータを解析して、以下に示すjson文字列にしました。

msg.payload:文字列[81] "[{"oid":"1.3.6.1.4.1.38783.3.3.1.1.1.0","type":2,"value":53800,"tstr":"Integer"}]"

この文字列から"value":53800を取り除き、msg.payloadに出力する関数を記述しようとしています。

以下を試しましたが、戻ります

"TypeError:読み取り専用プロパティ'_msgid'/"value":53700,"tstr":"Integer"}]"に割り当てることはできません

var msg = msg.payload;
var value = msg.substr(49,62);

return value;
3
Michael

そのように文字列を分割しようとしないでください。値の長さが変わると、エラーが発生しやすくなります。

代わりに、関数ノードの前にJSONノードを介してメッセージを実行します。

enter image description here

これにより文字列が解析され、適切なJSONオブジェクトが生成されます。

その後、値フィールドにアクセスできます。

var value = msg.payload[0].value;
msg.payload = value;
return msg;

Cannot assign to read only propertyエラーは、関数から文字列を返したためです。文字列ではなくメッセージJSONオブジェクトを返す必要があります。私の例ではmsg.payloadを必要な値に変更します。

8
hardillb