HarmonyOS鸿蒙Next支持异步转JSON Bean吗

HarmonyOS鸿蒙Next支持异步转JSON Bean吗 我定义了一个class类

Class User {
name:string= ""
}

有办法在子线程中把一个Json字符串转换成一个User Bean吗?需要实际类型就是UserBean

3 回复

开发者您好:

(1)在当前module下执行ohpm install命令安装所需的依赖:

```javascript
ohpm install class-transformer
ohpm install reflect-metadata

(2)参考以下代码:

```javascript
import { Type as JsonType, plainToClass } from 'class-transformer';
import "reflect-metadata";
import { JSON } from '@kit.ArkTS';

export namespace JSONTools {
  const albumJson =
    '{"id": 1, "name": "test", "photos": [{"id": 11, "name": "kkk.png"}, {"id": 112, "name": "fff.txt"}]}'

  // 相册类,包含一个Photo数组类型的成员
  class Album {
    id?: number;
    name?: string;
    // 自定义类型的成员需要添加装饰器进行映射才能正常转换
    @JsonType(() => Photo)
    photos: Photo[] = [];
  }

  // 照片类
  class Photo {
    id?: number;
    name?: string;

    getPhotoName(): string | undefined {
      return this.name
    }
  }

  export function getPhotoFiles(): string[] {
    // 通过JSON.parse进行反序列化,再用plainToClass进行类型转换
    let album = plainToClass(Album, JSON.parse(albumJson) as Album)
    if (album && album.photos && album.photos.length > 0) {
      // 通过map操作获取photos数组中每个对象的name属性
      return album.photos.flatMap(photo => photo.getPhotoName()!)
    }
    return []
  }
}

更多关于HarmonyOS鸿蒙Next支持异步转JSON Bean吗的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


请问下如何在子线程去执行parse操作呢?taskpool只能传输序列化对象,即便转完返回来也还是object基础类型,

是的,HarmonyOS鸿蒙Next支持异步转JSON Bean。开发者可以使用JsonUtil类中的parseObject方法,结合TaskDispatcher进行异步操作。通过TaskDispatcher将JSON字符串解析为Java对象,避免阻塞主线程,提升应用性能。具体实现可参考鸿蒙官方文档中的异步任务处理部分。

回到顶部