前言
GsonFormat插件,想必开发过Java和Android的同学再熟悉不过,使用它可以快速的把指定的json数据转换为我们需要的对象,大大提高了我们的开发效率。
然而针对ArkTs语言,目前尚未有针对的插件,作为一个较早布局鸿蒙的开发者,这份职责自然要拦下,填补鸿蒙开发的空白,经过一天开发,测试验证后,于是,鸿蒙版的json转对象可以面向大家了。
本篇分享的内容大概如下:
1、两种方式实现json转对象
2、json转对象如何实现
3、相关总结
一、两种方式实现json转对象
针对json转对象,目前开发了两种方式,一种是在线的网页形式,需要自己把生成的对象,复制到项目中,另一种是,devecostudio IDE插件形式,在项目中直接使用,相对网页版来说,更加的便捷,具体如何抉择,看个人使用习惯。
1、网页版json转对象
地址:https://abnerming888.github.io/vip/json/json.html
打开网页之后,UI很是简单,左侧是json输入区域,点击中间的转换对象,就会把json转换为ArkTs对象,回显至右侧的区域,底部有复制按钮,可直接复制到项目中粘贴即可,右侧底部的输入框,是当前的对象名字,也就是类的名字,可以动态修改,记住,修改之后,务必重新点击转换对象按钮。
2、插件版json转对象
上述的网页版,右侧有一个下载插件地址,点击后,就跳转到了IDE插件安装页面,我们按照相关步骤一步一步安装即可,当然这里也给大家简单阐述一遍。
第一步,下载插件
大家可以点击上边的插件下载,或者点击下面的链接,插件下载之后,是一个jar包,大概40KB左右。
https://abnerming888.github.io/vip/json/jar/HarmonyJsonToObject-1.0.jar
第二步,安装插件
打开devecostudio IDE,找到设置页面,点击Plugins选项,然后再点击设置图标,点击安装本地插件选项,如下图所示:
选择第一步中下载好的插件,点击ok。
继续点击ok即可。
前两步执行完毕后,我们的插件就安装好了。
插件使用
插件安装好之后,在我们创建好的对象类中,就可以进行使用了,两种方式,一种是右键,选择第一个选项“鸿蒙json转对象”,另一种是快捷键Ctrl+ALt+P。
上述执行之后,会弹出如下的窗口:
和网页版有着异曲同工之处,上面的输入框是当前对象的名字,一般情况下非必要不要需要修改,直接就是你创建的对象文件名字,往下就是,左侧json输入区域,点击转换之后,会把json转换为右侧的对象可预览模式,在右侧如果你想要修改,可以手动修改,没问题之后,点击底部的确认按钮,就会把生成的对象,回显至当前文件中。
效果如下动图所示:
二、json转对象如何实现
如果对实现不感兴趣的,大家只需要关注第一项就可以,毕竟不需要定向开发的话,这个了解的意义不大。
无论把json转换为什么语言的对象,基本上思路都是一致的,都要去遍历json,获取对象的key和value,依据value的数据类型,来定义字段的类型格式,值得高兴的是,ArkTs的数据类型相对Java要少的多。
网页版,毋庸置疑,使用的是js来实现的,对json进行循环遍历,而遇到数组,只遍历首个即可,主要代码如下:
function loopTraversalJson(json) {
let eachJson = "";
for (let key in json) {
let value = json[key];
if (typeof value == "number") {
eachJson = eachJson + " " + key + "?: number\n";
} else if (typeof value == "string") {
eachJson = eachJson + " " + key + "?: string\n";
} else if (typeof value == "boolean") {
eachJson = eachJson + " " + key + "?: boolean\n";
} else if (typeof value == "object") {
//对象,判断是对象还是数组
if (value == null) {//为空
eachJson = eachJson + " " + key + "?: object\n";
} else {
//不为空
let objFirst = JSON.stringify(value).substring(0, 1);
let aCode = key.substring(0, 1).toUpperCase();
aCode = aCode + key.substring(1, key.length);
if (objFirst === "{") {
//对象,首先创建类名
let obj = " " + key + "?: " + aCode + "\n";
//只创建属性,对象需要单独创建
eachJson = eachJson + obj;
//这里创建一个单独的对象
temporaryObject = temporaryObject + "\nexport class " + aCode +
" {\n";
temporaryObject = temporaryObject +loopTraversalJson(value);
temporaryObject = temporaryObject + "}\n";
} else {
//数组
let obj = " " + key + "?: " + aCode + "[]\n";
//只创建属性,对象需要单独创建
eachJson = eachJson + obj;
//这里创建一个单独的对象
temporaryObject = temporaryObject + "\nexport class " + aCode +
" {\n";
temporaryObject = temporaryObject +loopTraversalJson(value[0]);
temporaryObject = temporaryObject + "}\n";
}
}
}
}
return eachJson;
}
插件版,使用的是java语言,和js的实现逻辑一样,有一点不一样的是,java版遍历json其value可能存在多种类型,比如,value有可能是Integer,或者Float或者Double,而转化之后,统一就是number。
if (value instanceof Integer || value instanceof Float || value instanceof Double) {
//统一就是 number
endJson = endJson + " " + key + "?:number\n";
} else if (value instanceof String) {
endJson = endJson + " " + key + "?:string\n";
} else if (value instanceof Boolean) {
endJson = endJson + " " + key + "?:boolean\n";
} else if (value.toString().equals("null")) {
endJson = endJson + " " + key + "?:object\n";
} else if (value instanceof JSONArray) {
String upperCaseK = key.substring(0, 1).toUpperCase() + key.substring(1);
endJson = endJson + " " + key + "?:" + upperCaseK + "[]\n";
forJsonValue(((JSONArray) value).getJSONObject(0), key);
}
三、相关总结
目前插件版已提交jetbrains插件市场,审核过后,大家搜索HarmonyJsonToObject就可以搜到,当然了,未审核过之前,大家完全可以按照本地jar包安装进行使用,效果是完全一样的。
大家在使用过程之后,如果发现问题,可以及时告知,也希望鸿蒙版的json转对象,可以帮助到更多的鸿蒙开发者。
评论(0)