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

举报
程序员一鸣 发表于 2024/10/23 15:50:56 2024/10/23
【摘要】 然而针对ArkTs语言,目前尚未有针对的插件,作为一个较早布局鸿蒙的开发者,这份职责自然要拦下,填补鸿蒙开发的空白,经过一天开发,测试验证后,于是,鸿蒙版的json转对象可以面向大家了。

前言


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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。