在开发中经常会处理一些JSON字符串格式的数据,比如从服务器获取的数据,或者本地的一些数据。

let jsonStr = `[{"sName":"张三","age":"15","hobbies":["王者荣耀","唱歌"]},
{"sName":"李四","age":"90","hobbies":["羽毛球"]},
{"sName":"王五","age":"80","hobbies":["羽毛球","乒乓球","LOL"]}]`

一般使用JSON.parse()就可以将JSON字符串转化为对象进行使用。

let obj = JSON.parse(jsonStr);
console.log(obj[0].sName);

但是使用起来却不是很方便,比如写sName属性的时候,IDE不会有代码提示,这样会有单词拼写错误的风险;当业务复杂一点,多个地方也使用到了这个对象的时候,也不方便查看这个对象里面有哪些属性。

笔者习惯了使用Java开发,在鸿蒙的ArkTS中,也想像Java一样进行面向对象开发。正好ArkTS语言是基于TypeScript的,可以使用ES6里面的一些特性,比如类。

现在我想用下面这个Student类来封上面的jsonStr。

class Student {
sName: string;
age: number;
hobbies: Array<string>
}

在Java中我们可以使用谷歌的Gson很方便的将JSON格式的字符串转化为实体类:

Gson gson = new Gson();
Student student = gson.fromJson(jsonStr, Student.class);

目前笔者还没找到类似Gson的三方库,只能像下面这样把属性一个一个往Stuent对象里面塞,再把Student对象添加到集合,要是数据再复杂些那就更麻烦了。

let obj = JSON.parse(jsonStr);
for (var i = 0; i < obj.length; i++) {
let student = new Student();
student.sName = obj[i].sName
...
students.push(student)
}

还好在百度上找到了Object.assign()方法,将JSON对象拷贝到实体类就可以了,太方便了真是!

let students: Array<Student> = []
Object.assign(students, JSON.parse(jsonStr))
console.log(students[0].sName);