如何正确读取Philips Hue接口返回的对象数据
问题原因
- axios 请求返回的完整响应对象包含状态码、状态文本、响应头、响应体等多个字段,你需要的飞利浦 Hue 设备数据实际存储在
lightResp.data属性中,直接对整个lightResp取Object.values会把状态码等无关内容也纳入处理范围 - JavaScript 中直接将对象与字符串拼接时,会自动调用对象的
toString()方法,因此会输出[object Object]占位,无法展示对象实际内容 - 补充小优化:
fs.readFileSync是同步读写 API,不需要搭配await使用
修正代码
var fs = require('fs'); var axios = require('axios'); var token = fs.readFileSync("../hue_token.txt").toString(); token = token.replace(/(\r\n|\n|\r)/gm, ""); var lightResp = await axios.get(`http://192.168.1.58/api/${token}/lights`); // 取响应体中的设备数据 var lightList = lightResp.data; // 转成带缩进的JSON字符串打印,方便查看完整结构 this.logger.info("Here is the lightResp:\n" + JSON.stringify(lightList, null, 2));
设备遍历示例
如果你需要逐个处理每台设备,可以用以下写法:
// 遍历所有设备的ID和详情 for (const [lightId, lightDetail] of Object.entries(lightList)) { console.log(`设备ID:${lightId}`); console.log(`设备名称:${lightDetail.name}`); console.log(`设备开关状态:${lightDetail.state.on}`); // 可按需读取lightDetail下的state、capabilities、config等任意字段 }
内容的提问来源于stack exchange,提问作者JR Buda
相关产品推荐
相关产品推荐

