上一节我们利用三方库SocketIO实现了在设备间收发文本消息,那么对于更复杂的消息包,就不仅是简单的一串文本,而是采用JSON格式封装的字符串。鉴于JSON格式是很常见的数据格式,这里就不再啰嗦了,如果是纯新手不了解JSON格式的话,建议参考《Android Studio开发实战:从零基础到App上线(第3版)》一书的“13.2.1 移动数据格式JSON”。
在安卓系统中,需要引入第三方的Gson库才能解析JSON串;而鸿蒙系统自带了JSON库,无需集成其他的第三方库。在ETS代码开头添加下面的导包语句,即可引入鸿蒙自身的JSON库。
import { JSON } from '@kit.ArkTS'
在实际开发过程中,发现即使不添加上面的导包语句,ETS代码也能正常调用JSON库的相关方法。推测是因为JSON库很常用,所以App默认自动加载JSON库,从而无需开发者手工导入该库。
鸿蒙自带的JSON库主要提供了stringify和parse两个方法,其中stringify方法用于把指定的数据对象转换为JSON字符串,而parse方法用于将JSON字符串转换为执行类型的数据对象。下面详细介绍如何在实际业务中使用JSON库。
1、自定义一个数据结构
首先自己定义一个数据结构,比如下面定义的UserInfo结构,用来存放用户信息。
export class UserInfo {
id: number
name: string
age: number
stature: number
weight: number
ismarried: boolean
update_time: string
}
2、把构造好的数据对象转换为JSON字符串
先通过new创建UserInfo类型的数据对象,再调用JSON.stringify方法,把该对象转换为JSON格式的字符串。比如下面的属性初始化代码:
private user: UserInfo = new UserInfo('阿三', 40, 170, 70, false)
private jsonStr: string = JSON.stringify(this.user)
当然,也可根据需要在业务代码中随时把数据对象转为JSON字符串,比如下面的对象格式化代码:
this.jsonStr = JSON.stringify(this.user)
this.data = 'JSON串内容如下:\n' + this.jsonStr
3、把JSON字符串转换为指定类型的数据对象
拿到一个JSON格式的字符串以后,就能调用JSON.parse把该串解析为JSON格式,并添加后缀“as UserInfo”,表示把解析结果转换为UserInfo类型的数据对象。比如下面的解析代码把JSON串解析为UserInfo对象:
this.user = JSON.parse(this.jsonStr) as UserInfo
this.data = '从JSON串解析而来的用户信息如下:' +
'\n\t姓名=' + this.user.name +
'\n\t年龄=' + this.user.age +
'\n\t身高=' + this.user.stature +
'\n\t体重=' + this.user.weight +
'\n\t婚否=' + this.user.ismarried
综合上述的封装和解析代码,在鸿蒙真机上运行测试App,一开始点击原始按钮,把用户对象转成JSON串的效果如下图所示。
接着点击解析按钮,把JSON串转成用户对象的效果如下图所示。
下一篇文章会介绍如何从系统相册中选择待发送的图片文件。