HarmonyOS 是否有类似GSON、FastJSON之类的转换工具推荐

有没有类似GSON、FastJSON之类的转换工具推荐或者JSON对象的字符串是怎样转成对象的?

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

json转自定义class对象时需要将class对象new出来,这样才是真正转成了class对应的model。如果数据结构比较复杂、数据量比较大,不想在解析的时候每个对象都new一次,建议使用第三库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 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, 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('')
}

@Component
export struct ViewA {
  @ObjectLink testA: 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 })
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
是否类似fastjson库?
236浏览 • 1回复 待解决
HarmonyOS 是否类似fastjson这种JSON库
21浏览 • 1回复 待解决
是否采集内存泄露工具
2317浏览 • 1回复 待解决
HarmonyOS 是否自动化测试工具
26浏览 • 1回复 待解决
HarmonyOS 是否耗时统计工具
27浏览 • 1回复 待解决
HarmonyOS 是否类似画板功能组件
326浏览 • 1回复 待解决
HarmonyOS 是否类似事件总线组件
328浏览 • 1回复 待解决