HarmonyOS 类似Gson这种写法,在ArkTS中怎么写

类似Gson这种写法在Arkts中怎么写?json转map或者list数组。

HarmonyOS
2025-01-10 09:37:46
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

可使用三方库reflect-metadata和class-transformer。

安装方法:

ohpm install class-transformer  
ohpm install reflect-metadata 

参考代码:

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

class ResponseObj {
  @Type(() => Person)
  data: Person[] = [];
}

@Entry
@Component
struct Index9 {
  @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,age:item.hasAge(), testA: item.testA })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}
@Observed
export class TestA {
  public str : string
  constructor(str: string) {
    this.str = str;
  }
}
export class Person {
  name: string = ''
  age: number = 1
  @Type(()=>TestA)
  testA: TestA = new TestA('')
  hasAge():number
  {
    return this.age
  }
}
@Component
export struct ViewA {
  @ObjectLink testA: TestA
  index: number = -1;
  age:number = 0
  build() {
    Row(){
      Button(`View A  ${this.testA.str}`).onClick(() =>{
        this.index += 1;
        this.testA.str = `${this.index} : Test A String ${this.age}`
      })
    }.margin({top : 10 })
  }
}
分享
微博
QQ
微信
回复
2025-01-10 11:44:01
相关问题
HarmonyOS ArkTS运算符重载怎么
260浏览 • 1回复 待解决
HarmonyOS 怎么代码里循环标签
216浏览 • 1回复 待解决
HarmonyOS 是否有类似fastjson这种JSON库
482浏览 • 1回复 待解决
有人知道怎么markdown里面目录吗
2589浏览 • 1回复 已解决
这种流转面板怎么实现? 怎么调用?
6350浏览 • 1回复 待解决
HarmonyOS httpRequest,caPath路径的写法
300浏览 • 1回复 待解决
ArkTS写法是否可以按TS/JS的逻辑理解
2166浏览 • 1回复 待解决