如何解析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)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.

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

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

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; 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 转换结果
const instance = plainToClass(User, testJSON)
  • 1.

分享
微博
QQ
微信
回复
2024-05-24 22:13:55


相关问题
HarmonyOS 如何解析json字符串
1294浏览 • 1回复 待解决
嵌套JSON字符串解析问题
2509浏览 • 1回复 待解决
HarmonyOS 超长JSON字符串解析
792浏览 • 2回复 待解决
关于鸿蒙arkts解析json字符串问题
1263浏览 • 2回复 待解决
HarmonyOS 服务端JSON字符串解析问题
941浏览 • 1回复 待解决
如何打印JSON对象和JSON字符串
872浏览 • 1回复 待解决
如何实现Map转JSON字符串
1654浏览 • 1回复 待解决
如何JSON字符串转为Map
709浏览 • 1回复 待解决
如何将对象转为JSON字符串
1008浏览 • 1回复 待解决
HarmonyOS url里的字符串怎么解析
319浏览 • 1回复 待解决
HarmonyOS如何解压GZIP压缩过的字符串
1243浏览 • 1回复 待解决
如何JSON字符串转Class对象
869浏览 • 1回复 待解决
HarmonyOS 如何解压GZIP压缩过的字符串
440浏览 • 1回复 待解决
HarmonyOS 读取本地json文件转成字符串
540浏览 • 1回复 待解决
如何JSON字符串转Class对象数组?
969浏览 • 1回复 待解决