【问题标题】:NodeJS could not read [Object] in JSON dataNodeJS 无法读取 JSON 数据中的 [Object]
【发布时间】:2021-11-23 09:46:24
【问题描述】:

我有 JSON 格式的数据

{"mac":"f008d155b4fe","deviceClass":["iBeacon","eddystone"],"model":"iBeacon","lastSeen":"1637655820","bevent":{"event":"update"},"rssi":{"last":-84},"beacons":[{"ibeacon":{"uuid":"783a69707094d0863b4a9bf94e555241","major":816,"minor":6,"power":0},"eddystone":{"power":0}}],"sensors":{"temperatureC":18,"voltage":3.299999952316284},"stats":{"uptime":"710","adv_cnt":"24","frame_cnt":7}},
        {"mac":"a0e6f8515eff","deviceClass":["arubaTag"],"firmware":{"bankA":"1.2-15"},"assetId":"0000-0000-0000","lastSeen":"1637655821","bevent":{"event":"update"},"rssi":{"last":-69},"sensors":{"battery":83},"stats":{"uptime":"82350","frame_cnt":3},"vendorName":"Aruba"}

我可以从级别 1 打印数据,但我无法从 JSON 打印另一级别的数据 我想从信标打印值:[[Object]], 求指点谢谢

这是我的代码

const data = [
        {"mac":"f008d155b4fe","deviceClass":["iBeacon","eddystone"],"model":"iBeacon","lastSeen":"1637655820","bevent":{"event":"update"},"rssi":{"last":-84},"beacons":[{"ibeacon":{"uuid":"783a69707094d0863b4a9bf94e555241","major":816,"minor":6,"power":0},"eddystone":{"power":0}}],"sensors":{"temperatureC":18,"voltage":3.299999952316284},"stats":{"uptime":"710","adv_cnt":"24","frame_cnt":7}},
        {"mac":"a0e6f8515eff","deviceClass":["arubaTag"],"firmware":{"bankA":"1.2-15"},"assetId":"0000-0000-0000","lastSeen":"1637655821","bevent":{"event":"update"},"rssi":{"last":-69},"sensors":{"battery":83},"stats":{"uptime":"82350","frame_cnt":3},"vendorName":"Aruba"}
  ];
  
  const arr1 = data.filter(d => d.mac == "f008d155b4fe");
  console.log('arr1', arr1);
  for (k in arr1.beacons) {
    console.log(k, ":", arr1.beacons[k]);
}

【问题讨论】:

    标签: node.js json


    【解决方案1】:

    这对我有用,我把它全部变成了一个对象,现在你可以通过 newData.devices[0].beacons[0].(property) 访问信标

    const newData = {"devices": [{"mac":"f008d155b4fe","deviceClass":["iBeacon","eddystone"],"model":"iBeacon","lastSeen":"1637655820","bevent":{"event":"update"},"rssi":{"last":-84},"beacons":[{"ibeacon":{"uuid":"783a69707094d0863b4a9bf94e555241","major":816,"minor":6,"power":0},"eddystone":{"power":0}}],"sensors":{"temperatureC":18,"voltage":3.299999952316284},"stats":{"uptime":"710","adv_cnt":"24","frame_cnt":7}},         {"mac":"a0e6f8515eff","deviceClass":["arubaTag"],"firmware":{"bankA":"1.2-15"},"assetId":"0000-0000-0000","lastSeen":"1637655821","bevent":{"event":"update"},"rssi":{"last":-69},"sensors":{"battery":83},"stats":{"uptime":"82350","frame_cnt":3},"vendorName":"Aruba"}]};
    for (const beacon of newData.devices[0].beacons) {
        console.log(beacon);
    }
    

    【讨论】:

      【解决方案2】:

      您已接近解决方案,但 arr1 是一个数组,因此它没有“信标”属性。请改用以下内容:

          const data = [
              {"mac":"f008d155b4fe","deviceClass":["iBeacon","eddystone"],"model":"iBeacon","lastSeen":"1637655820","bevent":{"event":"update"},"rssi":{"last":-84},"beacons":[{"ibeacon":{"uuid":"7$
              {"mac":"a0e6f8515eff","deviceClass":["arubaTag"],"firmware":{"bankA":"1.2-15"},"assetId":"0000-0000-0000","lastSeen":"1637655821","bevent":{"event":"update"},"rssi":{"last":-69},"sen$
        ];
      
        const arr1 = data.filter(d => d.mac == "f008d155b4fe");
        console.log('arr1', arr1);
        for (k of arr1) {
          console.log(k.beacons);
      }
      

      【讨论】:

        【解决方案3】:

        arr1 是一个没有 beacons 属性的数组。如果您希望它是 mac 的唯一一项,您应该使用 data.find 而不是 data.filter。也不要使用for-in 循环遍历数组。您可以改用for-of 或.forEach。

        const data = [
                {"mac":"f008d155b4fe","deviceClass":["iBeacon","eddystone"],"model":"iBeacon","lastSeen":"1637655820","bevent":{"event":"update"},"rssi":{"last":-84},"beacons":[{"ibeacon":{"uuid":"783a69707094d0863b4a9bf94e555241","major":816,"minor":6,"power":0},"eddystone":{"power":0}}],"sensors":{"temperatureC":18,"voltage":3.299999952316284},"stats":{"uptime":"710","adv_cnt":"24","frame_cnt":7}},
                {"mac":"a0e6f8515eff","deviceClass":["arubaTag"],"firmware":{"bankA":"1.2-15"},"assetId":"0000-0000-0000","lastSeen":"1637655821","bevent":{"event":"update"},"rssi":{"last":-69},"sensors":{"battery":83},"stats":{"uptime":"82350","frame_cnt":3},"vendorName":"Aruba"}
          ];
          
          // expecting only o1 
          const arr1 = data.find(d => d.mac == "f008d155b4fe");
          console.log('arr1', arr1);
          for (const beacon of arr1.beacons) { // use for-of or `forEach`
            console.log(beacon);
        }
        

        【讨论】:

          猜你喜欢
          • 2018-06-18
          • 1970-01-01
          • 2012-10-11
          • 1970-01-01
          • 2023-03-05
          • 1970-01-01
          • 2018-12-27
          • 2018-12-24
          • 2016-10-21
          相关资源
          最近更新 更多