从对象获取数据时出现异常,请求排查问题
Node-RED Function节点读取带点JSON属性报错排查
你提供的校验有效的JSON数据如下:
{ "battery.level": 60, "channel.id": 1213793, "ident": "xx", "message.type": "V1", "peer": "xx", "position.direction": 0, "position.latitude": 1.3xx, "position.longitude": 1.3xx, "position.speed": 25 }
在Function节点读取这些属性时出错,大概率是JavaScript语法特性导致的操作失误,以下是具体排查和修正方案:
核心错误点及修正
带点的属性名不能直接用.运算符访问:
错误写法示例:
// 会抛出"Cannot read properties of undefined"错误 let level = msg.payload.battery.level;原因:JavaScript会把
battery解析成msg.payload下的子对象,再尝试读取它的level属性,但你的JSON里根本没有battery子对象,只有"battery.level"这个完整键名。正确写法示例:
// 用方括号[]访问带特殊字符的属性名 let batteryLevel = msg.payload["battery.level"]; let channelId = msg.payload["channel.id"]; let messageType = msg.payload["message.type"]; // 后续处理逻辑示例 msg.payload = { 电池电量: batteryLevel, 频道ID: channelId, 消息类型: messageType }; return msg;
其他排查方向
- 确认JSON数据位置:如果原始输入是JSON字符串,需要先通过
JSON.parse(msg.payload)转换成对象后再读取属性。 - 检查拼写一致性:确保代码中写的键名和JSON里的完全匹配,比如不要把
"position.speed"写成"position.speeds"。
内容的提问来源于stack exchange,提问作者user26347895
相关产品推荐
相关产品推荐

