如何将对象添加到 Node-RED msg.payload
How to add an object to the Node-RED msg.payload
我需要 Accel 对象作为负载对象的一部分:
- msg.payload.Accel.x : 1
- msg.payload.Accel.y : 2
- msg.payload.Accel.z : 3
如何将 Accel 和 x,z,y 添加到负载中,最好使用更改节点?
我已经试过了:
msg.payload.Accel['x'] = 1;
return msg;
出现错误:
"TypeError: Cannot set property 'x' of undefined"
这完全取决于 msg.payload
的开头。如果函数节点的输入是一个字符串,那么 msg.payload
将是一个字符串,您不能只向它添加任意属性。
如果输入已经是一个对象,那么它可以被扩展,但是你需要在对象中创建中间层,然后才能添加值。例如假设以下输入 msg.payload
:
{
foo: 25,
bar: 'testing'
}
要添加 Accel.x
,您首先需要添加一个 Accel
键,然后再尝试向 Accel.x
添加一个值。使用功能节点,您可以这样做:
msg.payload.Accel = {};
msg.payload.Accel.x = 1;
msg.payload.Accel['y'] = 2;
return msg;
使用更改节点时,它看起来像这样,因为更改节点将为您添加空层:
如果 payload 已经是一个对象,您可以使用 Change 节点来添加或修改 payload 中的属性,如下所示:
[{"id":"a5a26aa9.8e0c48","type":"change","z":"b46a495a.46a938","name":"","rules":[{"t":"set","p":"payload.Accel.x","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"payload.Accel.y","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"payload.Accel.z","pt":"msg","to":"3","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":260,"wires":[["85a0573d.ed8788","e0cc9521.5adb38"]]}]
如果有效负载以字符串(或其他非对象)的形式出现,并且您想使用 Change 节点将有效负载输出为对象,则首先必须使用规则将 msg.payload 设置为空 JSON 对象,然后进一步规则将 msg.payload.Accel.x 设置为 1,等等:
[{"id":"a5a26aa9.8e0c48","type":"change","z":"b46a495a.46a938","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.Accel.x","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"payload.Accel.y","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"payload.Accel.z","pt":"msg","to":"3","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":260,"wires":[["85a0573d.ed8788","e0cc9521.5adb38"]]}]
如果有效负载以字符串(或其他非对象)的形式出现,并且您想使用 Change 节点将有效负载输出为对象,并另外将旧的有效负载内容保留为 属性新的有效载荷对象,那么在将有效载荷更改为对象之前,您必须先使用规则将原始有效载荷存储在临时变量中:
[{"id":"a5a26aa9.8e0c48","type":"change","z":"b46a495a.46a938","name":"","rules":[{"t":"set","p":"temp","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.Accel.x","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"payload.Accel.y","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"payload.Accel.z","pt":"msg","to":"temp","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":260,"wires":[["85a0573d.ed8788","e0cc9521.5adb38"]]}]
我需要 Accel 对象作为负载对象的一部分:
- msg.payload.Accel.x : 1
- msg.payload.Accel.y : 2
- msg.payload.Accel.z : 3
如何将 Accel 和 x,z,y 添加到负载中,最好使用更改节点?
我已经试过了:
msg.payload.Accel['x'] = 1;
return msg;
出现错误:
"TypeError: Cannot set property 'x' of undefined"
这完全取决于 msg.payload
的开头。如果函数节点的输入是一个字符串,那么 msg.payload
将是一个字符串,您不能只向它添加任意属性。
如果输入已经是一个对象,那么它可以被扩展,但是你需要在对象中创建中间层,然后才能添加值。例如假设以下输入 msg.payload
:
{
foo: 25,
bar: 'testing'
}
要添加 Accel.x
,您首先需要添加一个 Accel
键,然后再尝试向 Accel.x
添加一个值。使用功能节点,您可以这样做:
msg.payload.Accel = {};
msg.payload.Accel.x = 1;
msg.payload.Accel['y'] = 2;
return msg;
使用更改节点时,它看起来像这样,因为更改节点将为您添加空层:
如果 payload 已经是一个对象,您可以使用 Change 节点来添加或修改 payload 中的属性,如下所示:
[{"id":"a5a26aa9.8e0c48","type":"change","z":"b46a495a.46a938","name":"","rules":[{"t":"set","p":"payload.Accel.x","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"payload.Accel.y","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"payload.Accel.z","pt":"msg","to":"3","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":260,"wires":[["85a0573d.ed8788","e0cc9521.5adb38"]]}]
如果有效负载以字符串(或其他非对象)的形式出现,并且您想使用 Change 节点将有效负载输出为对象,则首先必须使用规则将 msg.payload 设置为空 JSON 对象,然后进一步规则将 msg.payload.Accel.x 设置为 1,等等:
[{"id":"a5a26aa9.8e0c48","type":"change","z":"b46a495a.46a938","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.Accel.x","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"payload.Accel.y","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"payload.Accel.z","pt":"msg","to":"3","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":260,"wires":[["85a0573d.ed8788","e0cc9521.5adb38"]]}]
如果有效负载以字符串(或其他非对象)的形式出现,并且您想使用 Change 节点将有效负载输出为对象,并另外将旧的有效负载内容保留为 属性新的有效载荷对象,那么在将有效载荷更改为对象之前,您必须先使用规则将原始有效载荷存储在临时变量中:
[{"id":"a5a26aa9.8e0c48","type":"change","z":"b46a495a.46a938","name":"","rules":[{"t":"set","p":"temp","pt":"msg","to":"payload","tot":"msg"},{"t":"set","p":"payload","pt":"msg","to":"{}","tot":"json"},{"t":"set","p":"payload.Accel.x","pt":"msg","to":"1","tot":"num"},{"t":"set","p":"payload.Accel.y","pt":"msg","to":"2","tot":"num"},{"t":"set","p":"payload.Accel.z","pt":"msg","to":"temp","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":270,"y":260,"wires":[["85a0573d.ed8788","e0cc9521.5adb38"]]}]