You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node-RED注入节点后如何从返回对象提取指定值作为msg.payload?

Node-RED提取指定字段值实现方案

问题场景

搭建Node-RED流程实现图表输出时,触发注入节点后可获取包含id/s/r/v/t等键值对的返回对象,注入节点输出示例:

{
  "readResults": [
    {
      "id": "AB.CMM.Prgm_MainProgram.f_ten_point_avg_left_camber",
      "s": true,
      "r": "",
      "v": 0.0261451192,
      "t": 1657888956310
    }
  ]
}

目标是仅提取键名v对应的数值,赋值给msg.payload输出,例如上述示例最终输出0.0261451192即可。

原有代码错误原因

之前编写的function节点代码如下,无法正常运行:

var newMsg = { payload: msg.payload[5] };
return newMsg;

错误点:

  • 错误将msg.payload当作可按数字索引直接取值的字符串/扁平数组,实际上目标v字段嵌套在readResults数组的子对象中
  • 没有考虑部分场景下注入节点输出的payload是JSON字符串格式,需要先解析为JavaScript对象才能按键取值

正确实现代码

将function节点内的代码替换为以下内容即可:

// 兼容payload为JSON字符串/JS对象两种格式
const responseData = typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload;
// 提取目标v值赋值给payload
msg.payload = responseData.readResults[0].v;
return msg;

扩展适配

如果后续readResults数组返回多条数据,需要提取所有条目对应的v值对接图表,可以将取值逻辑替换为以下写法,输出为所有v值组成的数组:

const responseData = typeof msg.payload === 'string' ? JSON.parse(msg.payload) : msg.payload;
msg.payload = responseData.readResults.map(item => item.v);
return msg;

部署后可在function节点后连接debug节点,确认输出值符合预期后再对接图表节点即可。


内容的提问来源于stack exchange,提问作者Glenn94

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 19:48:33