鸿蒙 JSON->Model 方案
一、案例
在做鸿蒙版微信的时候遇到个问题,大量的展示数据怎么实现,最开始用的 interface
数组,创建了很多数据,扩展性不强,后期难维护。
后面想到用接口替换的话,最直接的就是自己造 JSON 数据,用本地 JSON 文件去读取展示。
二、鸿蒙 JSON 文件读取
在确定用 JSON 方案的第一步,跟iOS的逻辑差不多,先找到文件路径,然后用资源管理器去加载出来
JSON文件内容:
{
"result":1,
"data":[
{
"type":0,
}
]
}
加载JSON 文件内容
let rawFile = context.resourceManager.getRawFileContentSync(jsonPath)
这里需要用到 context
,就需要在页面的方法里获取:
aboutToAppear() {
let context = getContext(this) as common.UIAbilityContext;
this.dataList = BAPyqViewModel.getDataList(context)
}
我这里是在 朋友圈页面的 aboutToAppear
方法里去调用,
在拿到 context
后用下面的方法加载JSON文件内容:
context.resourceManager.getRawFileContentSync
let jsonStr: string = util.TextDecoder.create('utf-8', { ignoreBOM: true }).decodeWithStream(rawFile);
三、解析 JSON 内容
上一步拿到 jsonStr 后,接下来就是怎么用:
let jsonObj = JSON.parse(jsonStr) as Record<string, Object>
我是用了iOS开发的惯性思维,读取出来字典内容,然后去获取想要的数据:
let result = jsonObj["result"] as number
if (result == 1) {
let data: BAPyqItemModel[] = jsonObj["data"] as BAPyqItemModel[]
return data
} else {
return []
}
这样就拿到了 JSON 文件的 result
和 data
,最终返回出去的是 BAPyqItemModel
数组
注:如有需要可以前往 GitHub 查看 鸿蒙微信 的具体实现: