HarmonyOs开发:json转对象,一个插件轻松搞定!

前言

GsonFormat插件,想必开发过Java和Android的同学再熟悉不过,使用它可以快速的把指定的json数据转换为我们需要的对象,大大提高了我们的开发效率。

然而针对ArkTs语言,目前尚未有针对的插件,作为一个较早布局鸿蒙的开发者,这份职责自然要拦下,填补鸿蒙开发的空白,经过一天开发,测试验证后,于是,鸿蒙版的json转对象可以面向大家了

本篇分享的内容大概如下:

1、两种方式实现json转对象

2、json转对象如何实现

3、相关总结

一、两种方式实现json转对象

针对json转对象,目前开发了两种方式,一种是在线的网页形式,需要自己把生成的对象,复制到项目中,另一种是,devecostudio IDE插件形式,在项目中直接使用,相对网页版来说,更加的便捷,具体如何抉择,看个人使用习惯。

1、网页版json转对象

地址:abnerming888.github.io/vip/json/js...

打开网页之后,UI很是简单,左侧是json输入区域,点击中间的转换对象,就会把json转换为ArkTs对象,回显至右侧的区域,底部有复制按钮,可直接复制到项目中粘贴即可,右侧底部的输入框,是当前的对象名字,也就是类的名字,可以动态修改,记住,修改之后,务必重新点击转换对象按钮。

2、插件版json转对象

上述的网页版,右侧有一个下载插件地址,点击后,就跳转到了IDE插件安装页面,我们按照相关步骤一步一步安装即可,当然这里也给大家简单阐述一遍。

第一步,下载插件

大家可以点击上边的插件下载,或者点击下面的链接,插件下载之后,是一个jar包,大概40KB左右。

abnerming888.github.io/vip/json/ja...

第二步,安装插件

打开devecostudio IDE,找到设置页面,点击Plugins选项,然后再点击设置图标,点击安装本地插件选项,如下图所示:

选择第一步中下载好的插件,点击ok。

继续点击ok即可。

前两步执行完毕后,我们的插件就安装好了。

插件使用

插件安装好之后,在我们创建好的对象类中,就可以进行使用了,两种方式,一种是右键,选择第一个选项"鸿蒙转对象",另一种是快捷键Ctrl+ALt+P。

上述执行之后,会弹出如下的窗口:

和网页版有着异曲同工之处,上面的输入框是当前对象的名字,一般情况下非必要不要需要修改,直接就是你创建的对象文件名字,往下就是,左侧json输入区域,点击转换之后,会把json转换为右侧的对象可预览模式,在右侧如果你想要修改,可以手动修改,没问题之后,点击底部的确认按钮,就会把生成的对象,回显至当前文件中。

效果如下动图所示:

二、json转对象如何实现

如果对实现不感兴趣的,大家只需要关注第一项就可以,毕竟不需要定向开发的话,这个了解的意义不大。

无论把json转换为什么语言的对象,基本上思路都是一致的,都要去遍历json,获取对象的key和value,依据value的数据类型,来定义字段的类型格式,值得高兴的是,ArkTs的数据类型相对Java要少的多。

网页版,毋庸置疑,使用的是js来实现的,对json进行循环遍历,而遇到数组,只遍历首个即可,主要代码如下:

TypeScript 复制代码
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。

TypeScript 复制代码
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转对象,可以帮助到更多的鸿蒙开发者。

相关推荐
sziitjin14 分钟前
IOS 25 实现歌单详情(UITableView)列表 ②
ios·uitableview
xcLeigh24 分钟前
html实现好看的多种风格手风琴折叠菜单效果合集(附源码)
android·java·html
让开,我要吃人了29 分钟前
HarmonyOS鸿蒙开发实战(5.0)自定义全局弹窗实践
前端·华为·移动开发·harmonyos·鸿蒙·鸿蒙系统·鸿蒙开发
青瓷看世界1 小时前
华为HarmonyOS地图服务 7- 在地图上绘制标记
华为·harmonyos
图王大胜1 小时前
Android SystemUI组件(07)锁屏KeyguardViewMediator分析
android·framework·systemui·锁屏
InsightAndroid1 小时前
Android通知服务及相关概念
android
yanling20232 小时前
camtasia2024绿色免费安装包win+mac下载含2024最新激活密钥
macos·ios·camtasia·camtasia2024
云兮Coder2 小时前
鸿蒙Harmony应用开发,数据驾驶舱页面的实现
华为·harmonyos
aqi003 小时前
FFmpeg开发笔记(五十四)使用EasyPusher实现移动端的RTSP直播
android·ffmpeg·音视频·直播·流媒体
Leoysq3 小时前
Unity实现原始的发射子弹效果
android