如何解析JSON字符串?

1、复杂不明结构JSON需要解析为对象并获取修改对应值

2、需要方案将JSON数据转换成ArkTS中类的实例对象,要求可以使用实例对象的属性,调用实例对象的方法,包括嵌套对象的场景。尝试使用 JSON 的 stringify 和 parse 方法,如链接,但是 ArkTS 中会限制使用 eval 函数,该方法不可行。

HarmonyOS
2024-05-23 22:38:42
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
xcbaby

1、复杂不明结构JSON需要解析为对象并获取修改对应值

通过ESObject接收parse出的JSON。

let userResp:ESObject = { 
  nickname: "一个很长的名字", 
  avatar: "https://www.baidu.com/" 
} 
let data:ESObject = { 
  roomId: "823688", 
  nativeUrl: "native://enterLiveRoom?RoomId=823688", 
  status: "1", 
  userResp: [ 
    userResp 
  ] 
} 
let jsonObj:ESObject= { 
  reqId: "2b2258ae54e3101a", 
  code: 0, 
  msg: "success", 
  data:data 
} 
let json:string = JSON.stringify(jsonObj) 
  
let test:ESObject = JSON.parse(json) 
console.info(test.msg) 
console.info(test.data.userResp[0].nickname)

2、基于class-transformer的JSON数据转换成类实例对象的实

  • 安装/引入三方库
ohpm install class-transformer 
ohpm install reflect-metadata 
import { Type, plainToClass } from 'class-transformer' 
import "reflect-metadata"
  • 定义JSON数据
let testJSON: Record<string, ESObject> = { 
  'id': 1, 
  'firstName': "Johny", 
  'lastName': "Cage", 
  'age': 27, 
  'arr': [ 
    { 
      'name': 'john' 
    }, 
    { 
      'name': 'tom' 
    } 
  ], 
  'instanceA': { 
    'name': 'john' 
  }, 
}
  • 定义class对象Class A
class A { 
  name: string = 'john'; 
  
  getName(): string { 
    return this.name; 
  } 
}

Class User

// 当尝试转换具有嵌套对象的对象时,需要知道要转换的对象类型,使用@Type装饰器隐式地指定每个属性包含的对象类型 
class User { 
  id: number = 0; 
  firstName: string = ''; 
  lastName: string = ''; 
  age: number = 0; 
  
  @Type(() => A) 
  arr: A[] = [new A()] 
  
  @Type(() => A) 
  instanceA: A = new A(); 
  
  getName() { 
    return this.firstName + " " + this.lastName; 
  } 
  
  isAdult() { 
    return this.age > 36 && this.age < 60; 
  } 
}
  • 转换结果
const instance = plainToClass(User, testJSON)

分享
微博
QQ
微信
回复
2024-05-24 22:13:55
相关问题
嵌套JSON字符串解析问题
669浏览 • 1回复 待解决
如何实现Map转JSON字符串
593浏览 • 1回复 待解决
json字符串与自定义class结构的转换
654浏览 • 1回复 待解决
如何实现字符串编解码
954浏览 • 1回复 待解决
如何生成UUID的字符串
827浏览 • 1回复 待解决
如何压缩字符串,有人知道吗?
452浏览 • 1回复 待解决
如何实现ArkUI组件字符串变量拼接
1200浏览 • 1回复 待解决
ArkTS如何实现字符串编解码
1198浏览 • 1回复 待解决
Web如何使用loadData加载复杂Html字符串
778浏览 • 1回复 待解决
如何加载字符串形式H5数据
664浏览 • 1回复 待解决
emoji字符串无法进行截取
491浏览 • 1回复 待解决
如何字符串进行MD5哈希处理
985浏览 • 1回复 待解决
关于字符串的分割和重组处理
2564浏览 • 1回复 待解决