HarmonyOS 鸿蒙Next官方推荐的解析model的方式是什么

发布于 1周前 作者 gougou168 来自 鸿蒙OS

HarmonyOS 鸿蒙Next官方推荐的解析model的方式是什么

我们从网络上访问得到了一个字段比较多的Object,里面拥有的字段基本都是某个model中的字段,比如jsonmodel这个class里面的字段,请问如何把这个object当成jsonmodel使用,官方推荐的object转model的方式是什么? 1. 强行使用as ?,这样可能封装多层以后会被误认为就是jsonmodel类,然后调用jsonmodel中的方法结果crash了 2. 写一个ts文件,使用ts的动态属性,new出来一个jsonmodel然后把对应的字段属性利用[]下标的方式全部读取出来赋值然后export到ets文件 3. 自己在ets文件中new出来一个jsonmodel,然后一个个去手动给属性赋值,如果存在某个属性需要进行转换,就继承jsonmodel生成一个新的属性一个个去赋值


更多关于HarmonyOS 鸿蒙Next官方推荐的解析model的方式是什么的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

可以通过引入三方库 reflect-metadata 和 class-transformer,参考如下demo实现:

//TestJson.ets
import { plainToClass, Type } from 'class-transformer';
import 'reflect-metadata';
import { Person, ViewA } from './ViewA';
class ResponseObj {
  @Type(() => Person)
  data: Person[] = [];
}
@Entry
@Component
struct TestJson {
  @State list: Person[] = [];
  @State message: string = 'Click me';
  aboutToAppear(): void {
    let str = '{"data" : [{"number" :1,"age": 20, "testA": { "str" : "123"}},{"number" :2,"age": 21,"testA": {"str" : "456"}}]}'
    let jsonData: ESObject = JSON.parse(str)
    let responseObj: ResponseObj = plainToClass(ResponseObj, jsonData);
    console.log(` ${responseObj.data[0] instanceof Person}`)
    this.list = this.list.concat(responseObj.data);
  }
  build() {
    Row() {
      Column() {
        ForEach(this.list, (item: Person, index: number) => {
          ViewA({ index: index, test
            item.testA })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
//ViewA.ets
import { Type } from 'class-transformer'
@Observed
export class TestA {
  public str : string
  constructor(str: string) {
    this.str = str;
  }
}
export class Person {
  name: string = ''
  age: number = 1
  @Type(()=>TestA)
  test
  TestA = new TestA('')
}
@Component
export struct ViewA {
  @ObjectLink test
  TestA
  index: number = -1;
  build() {
    Row(){
      Button(`View A ${this.testA.str}`).onClick(() =>{
        this.index += 1;
        this.testA.str = `${this.index} : Test A String`
      })
    }.margin({top : 10 })
  }
}

可以使用ohpm 引入三方库

ohpm install class-transformer

ohpm install reflect-metadata

更多关于HarmonyOS 鸿蒙Next官方推荐的解析model的方式是什么的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS鸿蒙Next官方推荐的解析model的方式主要是通过其提供的JSON解析API来进行。具体来说,HarmonyOS支持使用JSON格式进行数据解析和处理,并提供了ohos.utils.fastjson包来辅助开发者完成这一任务。

在使用HarmonyOS进行JSON解析时,开发者需要先将JSON数据转换为字符串,然后利用ohos.utils.fastjson包中的JSONObject或JSONArray类进行解析。通过调用这些类中的方法,如getString、getInteger、getBoolean和getJSONArray等,开发者可以方便地获取JSON数据中各个键对应的值。

这种方式不仅符合HarmonyOS的开发规范,而且能够确保数据的类型安全、提高代码的可读性和可维护性。同时,利用HarmonyOS提供的JSON解析API进行模型解析,还可以更好地与鸿蒙框架和库集成,从而提高开发效率。

如果开发者在解析过程中遇到问题,建议查阅HarmonyOS的官方文档或相关开发指南,以获取更详细的信息和示例代码。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部