如何从Node-RED对象中提取单个数据?
解决Node-RED中函数节点返回对象的取值问题
你这是踩了Node-RED函数节点返回逻辑的小坑!我来帮你捋清楚问题出在哪:
首先得确认你第一个函数节点的返回代码写法。如果你的代码是直接返回了那个包含task1/task2的对象,比如:
return {task1:"14124.44",task2:"23123.22",task3:"22323.22",_msgid:"33erewfddsfds"};
那这个返回的对象会直接替换整个msg对象,而不是被放到msg.payload里。这时候你在后续函数节点里用msg.payload['task1']肯定取不到值——因为task1根本不在payload里,而是挂在msg根节点上!
两种解决办法:
修改第一个函数节点,把数据放到payload中
这是Node-RED的标准实践,数据统一放在msg.payload里管理。修改后的代码应该是:return { payload: { task1:"14124.44", task2:"23123.22", task3:"22323.22" } // _msgid会自动生成,不用手动指定也可以 };这样后续节点里用
msg.payload.task1或者msg.payload['task1']就能正常拿到对应的值了。不修改第一个节点,直接访问msg根节点的属性
如果你不想改动前面的节点,那在后续函数节点里直接用msg.task1就能获取到对应的值,因为这个属性已经直接挂载在msg对象本身上了。
调试小技巧
以后遇到这类取值困惑,建议在节点之间加一个Debug节点,设置为显示「完整msg对象」,这样你就能直观看到数据到底存在msg的哪个层级,再也不用瞎猜啦!
内容的提问来源于stack exchange,提问作者Hsn
相关产品推荐
相关产品推荐

