HarmonyOS JSON解析实体方法无法调用

@Observed
export class WaterStatus {
  code: number
  msg: string
  data: StatusData
  constructor(code: number, msg: string, data: StatusData) {
    this.code = code
    this.msg = msg
    this.data = data
  }
}

@Observed
export class StatusData {
  is_online: boolean
  battery_status?: number //第1位为有无电池;第2位为是否充电中;第3、4、5位表示电量二进制(0,1,2,3,4,5档)

  constructor(is_online: boolean, battery_status: number,) {
    this.is_online = is_online
    this.battery_status = battery_status
  }

  /**
   * 是否有电池
   */
  hasBattery(): boolean {
    if (this.battery_status == undefined) {
      return false
    }
    return (this.battery_status >> 0 & 0x0001) == 1
  }

  /**
   * 是否充电中
   */
  isCharge(): boolean {
    if (this.battery_status == undefined) {
      return false
    }
    return (this.battery_status >> 1 & 0x0001) == 1
  }
}

result={"code":200,"msg":"ok","data":{"is_online":true,"battery_status":19,"mode":5,"nodistrub":"","timezone":28800,"remind":0,"water_status":0,"change_remind":3,"duration":30,"sleep_time":60}}
let waterStatus = JSONUtil.jsonToBean(WaterStatus, result)
let data = waterStatus?.data
let hasBattery = data?.hasBattery()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.

对象的方法hasBattery无法调用。

HarmonyOS
2024-12-25 12:49:36
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
aquaa

请参考示例如下:

import 'reflect-metadata';
import { plainToClass, Type } from 'class-transformer';

export class WaterStatus {
  code: number = 0
  msg: string = ''
  @Type(() => StatusData)
  data: StatusData = new StatusData()

}

@Observed
export class StatusData {
  is_online: boolean = false
  battery_status?: number = 0 //第1位为有无电池;第2位为是否充电中;第3、4、5位表示电量二进制(0,1,2,3,4,5档)
  water_status?: number = 0 //第1、2位决定,00充足[0]、01缺水[1]、10无水[2]、11水桶异常[3]
  mode?: number = 0
  nodistrub?: string = ''
  timezone?: number = 0
  remind?: number = 0
  change_remind?: number = 0
  sleep_time?: number = 0
  duration?: number = 0


  /**
   * 是否有电池
   */
  hasBattery(): boolean {
    if (this.battery_status == undefined) {
      return false
    }
    return (this.battery_status >> 0 & 0x0001) == 1
  }

  /**
   * 是否充电中
   */
  isCharge(): boolean {
    if (this.battery_status == undefined) {
      return false
    }
    return (this.battery_status >> 1 & 0x0001) == 1
  }

  /**
   * 当前电量
   * 第3、4、5位表示电量二进制(0,1,2,3,4,5档)
   */
  curPower(): number {
    if (this.battery_status == undefined) {
      return 0
    }
    let bit2 = this.battery_status >> 2 & 0x0001
    let bit3 = this.battery_status >> 3 & 0x0001
    let bit4 = this.battery_status >> 4 & 0x0001
    return bit2 + (bit3 << 1) + (bit4 << 2)
  }

  /**
   * 第1、2位决定,00充足[0]、01缺水[1]、10无水[2]、11水桶异常[3]
   */
  waterStatus(): number {
    if (this.water_status == undefined) return 0
    let bit0 = this.water_status >> 0 & 0x0001
    let bit1 = this.water_status >> 1 & 0x0001
    return bit0 + (bit1 << 1)
  }

  /**
   * 出水模式设置 :第1、2位决定,00感应、01持续、10间接感应
   * @return 0感应、1持续、2间接感应
   */
  getWorkMode(): number {
    if (this.mode == undefined) return 0
    let bit0 = this.mode >> 0 & 0x0001
    let bit1 = this.mode >> 1 & 0x0001
    return bit0 + (bit1 << 1)
  }
}
aboutToAppear(): void {
  let json = '{"code":200,"msg":"ok","data":{"is_online":true,"battery_status":19,"mode":5,"nodistrub":"","timezone":28800,"remind":0,"water_status":0,"change_remind":3,"duration":30,"sleep_time":60}}'
  let jsonData1: ESObject = JSON.parse(json)
  let responseObj1: WaterStatus = plainToClass(WaterStatus, jsonData1);
  responseObj1.data.hasBattery()
  console.log('waterStatus===='+ responseObj1.data.waterStatus())
  console.log('getWorkMode===='+ responseObj1.data.getWorkMode())
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
分享
微博
QQ
微信
回复
2024-12-25 13:56:41


相关问题
HarmonyOS JSON实体
703浏览 • 1回复 待解决
HarmonyOS json 解析
772浏览 • 1回复 待解决
HarmonyOS Jsons解析的对象无法调用防范
1375浏览 • 1回复 待解决
HarmonyOS JSON转换后调用对象方法报错
909浏览 • 1回复 待解决
HarmonyOS json解析异常
1234浏览 • 1回复 待解决
HarmonyOS 是否有json实体类的工具
958浏览 • 1回复 待解决
HarmonyOS 实体类如何重写toString方法
636浏览 • 1回复 待解决
HarmonyOS 关于json解析问题
748浏览 • 1回复 待解决
HarmonyOS JSON数据解析问题
802浏览 • 1回复 待解决
能否支持json实体类的工具
1756浏览 • 1回复 待解决
HarmonyOS使用json解析报错
2703浏览 • 2回复 待解决
HarmonyOS json解析问题
1170浏览 • 1回复 待解决
HarmonyOS json解析特殊字符
706浏览 • 1回复 待解决
HarmonyOS JSON解析number丢失精度
1269浏览 • 1回复 待解决
HarmonyOS 数据类中的方法无法调用
970浏览 • 1回复 待解决
HarmonyOS 怎么解析本地文件json内容?
904浏览 • 1回复 待解决