HarmonyOS脚手架:快捷实现ArkTs中json转对象

news2024/11/24 3:46:20

前言

在上篇《HarmonyOS开发:UI开展前的阶段总结》中提到了未来的规划,既能让大家学会鸿蒙开发,也能让大家在以后的开发中如虎添翼,最终决定,便以脚手架为产出物,结合实际的业务需求,进行相关技术的输出,今天我们就带来脚手架的第一个功能,json转对象。

脚手架也是一个项目,包含了多个功能模块,以简单的功能为切入点,一点点的进行拓展增加,后续相关功能也会增加IDE插件,当然了,这都是后话了,万事开头难,万事坚持也难,做东西着急不得,一点点来吧。

本篇的文章大致如下

1、脚手架地址及使用方式

2、json转对象功能介绍

3、json转对象实现分析

4、相关总结

一、脚手架地址及使用方式

本来想打成Windows和Mac工具包,方便大家安装使用,但是转念一想,功能刚开始,以后也会不断地更新迭代,索性以项目地形式暴露给大家吧,使用起来也是非常地简单,等后续功能开发完毕了,可以打统一打安装包共大家使用。

温馨提示:只第一次需要执行前2步,前两步完成之后,后续只需要执行第3步即可。

第1步:使用git把项目clone到你的电脑中

大家可以按照自己习惯的方式进行下载,比如使用IDE,使用TortoiseGit工具,或者使用命令,都行,以下是命令的形式下载:

git clone https://github.com/AbnerMing888/HarmonyScaffolding.git

下载之后,目录如下,这些都是项目的源文件:

第2步:依次执行如下命令

由于缺乏安装包,所以第2步的作用就是,我们自己下载安装包,需要在项目根目录下执行如下命令:

安装 Electron

这个上篇文章有提及过,脚手架工具采用的是Electron进行开发的,它是一个使用 JavaScript、HTML 和 CSS 构建跨平台的桌面应用程序,既然要使用它,就需要进行安装,命令如下:

npm install --save-dev electron@^15.0.0

目前我是指定版本安装的,并配置在了package.json文件中devDependencies,主要用于开发阶段,大家可以和我的不一样,这个问题不大。

安装模块remote

remote 模块提供了一种在渲染进程和主进程之间进行进程间通讯的简便途径,使用 remote 模块,可以调用主进程对象的方法,而无需显式地发送进程间消息,这类似于 Java 的 RMI,虽然说13版本之后禁用了Remote模块,但是也提供了使用一个新的包 @electron/remote 来替代,一句话,主要用于dialog相关,比如弹窗,选择电脑路径等。

npm i -D @electron/remote

第3步:启动项目

npm start

执行之后,便能看到脚手架工具的启动页,如下所示:

二、json转对象功能介绍

使用npm start启动项目后,点击json转对象功能,便进入到如下页面,由于脚手架工具刚启动,其他功能还未开发,大家只可关注json转对象这一个功能即可。

功能区分了上下两块,上面是接口请求,下面是功能展示,可结合使用,也可单独使用。

单独使用

在输入json框中输入需要转对象的json数据,点击转换对象按钮,便可生成对应的ArkTs对象,直接可以复制到项目中使用。

右侧底部两个选项,一个是对象的名字,可以自己定义,一个是需要保存的模块,如何你不想复制,想直接保存到你的项目中,那么就可以选择要保存到项目中哪个模块下,这个需要和左侧的项目初始化功能结合使用。

如下图项目初始化功能,在这里你可以选择一个你的项目路径,到项目根目录即可,那么接下来,脚手架的所有功能都会生成到你选择的项目下,不用再一一的手动复制了。

还是回到json转对象功能,我们选择一个保存模块,当你选择你的项目路径后,便会遍历出你项目下所有符合的模块。

比如,我选择一个项目后,目录结构如下,那么符合保存的模块只有,entry和common。

当你点击选择保存模块后,就可以选择模块:

点击保存后:

回到项目查看,便生成到了你的项目下:

结合网络接口使用

顶部你可以输入你要请求的接口及相关参数,选择请求方式后,点击发起请求,便可把请求的json数据回显到下方的json框中,点击转换对象,便可直接生成对应的对象,之后的步骤,与上述就一致了。

三、json转对象实现分析

如何把一个json数据转化为我们需要的对象,需要做的是就是对json数据的遍历,遍历出所有的key和value,然后根据value值的类型,对应的转换为语言的对象即可,如,我们得到了一个字段code,它的值是0,那么在ArkTs中,便可以使用,code:number 来表示,Java中,便是,public int code; 来表示。

一个json数据,里面会有很多数据类型,所以,在代码编写的时候务必要考虑周全,如果json数据中有对象和数组,我们需要进行递归,这是不可忽视的。

生成ArkTs对象,对json数据类型判断如下,当然了如果你是其他语言,需要再做细化。

for (let key in json) {
            let value = json[key];
            if (typeof value == "number") {
              
            } else if (typeof value == "string") {
              
            } else if (typeof value == "boolean") {
               
            } else if (typeof value == "object") {
                //数组和对象都是 object
                let obj = JSON.stringify(value).substring(0, 1);
                if (obj === "{") {
                    //对象
                    
                }else{
                    //数组
                }
            }
        }

遍历中用一个变量作为存储,以ArkTs对象格式为依据,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";
            }

完整的json遍历如下:

 let temporaryObject = "";//临时的对象

    function forEachJson(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 + ": String? = null";
                } 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 + forEachJson(value);
                        temporaryObject = temporaryObject + "}\n";
                    } else {
                        //数组
                        let obj = "    " + key + ": " + aCode + "[]\n";
                        //只创建属性,对象需要单独创建
                        eachJson = eachJson + obj;
                        //这里创建一个单独的对象
                        temporaryObject = temporaryObject + "\nexport class " + aCode +
                            " {\n";
                        temporaryObject = temporaryObject + forEachJson(value[0]);
                        temporaryObject = temporaryObject + "}\n";

                    }
                }
            }
        }

        return eachJson;
    }

四、相关总结

目前呢,脚手架工具刚开始,只完成了这样的一个单一功能,后续会不断的扩展,还请大家后续的关注,至于IDE插件,后续也会进入到日程之中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1230141.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

读《Segment Anything in Defect Detection》

摘要 (好像只是说把SAM应用到了红外缺陷分割领域) 引言 无损检测得到红外图像,根据热能观察异常 贡献: •从两个光学脉冲热成像系统构建广泛的缺陷热数据库,包括各种材料并释放它们。 • 开发DefectSAM,这是第一个用于缺陷检测…

什么是美颜SDK?直播美颜SDK技术深度剖析

在实现实时美颜的过程中,美颜SDK扮演着关键的角色,它为开发者提供了一套强大的工具,使得实时美颜效果能够轻松应用于直播平台。 一、美颜SDK的基本概念 美颜SDK是一种软件工具包,通过集成了丰富的图像处理算法和实时计算技术&a…

香港身份和内地身份可以共存吗?

香港身份和内地身份可以共存吗? 很多朋友在刚开始了解香港身份的时候,都会对香港永居身份、居民身份、内地户口等等名词产生疑惑,搞不清它们之间的区别。 还有一部分人误以为拿到香港身份就意味着要放弃内地户口。 今天银河君就来具体解释…

java springboot在测试类中启动一个web环境

我们在开发过程中 可以对数据层 业务层做测试 那我们的表现层能做测试吗? 答案自然是可以的 但是 前提 我们要有一个web环境 我们现在 测试类运行 明显是个很普通的java程序 还是这个 SpringBootTest 它有一个 webEnvironment 我们可以先这样写 package com.examp…

大数据-之LibrA数据库系统告警处理(ALM-12057 元数据未配置周期备份到第三方服务器的任务)

告警解释 系统安装完成后会检查元数据是否有周期备份到第三方服务器的任务,然后每1小时会检查一次。如果元数据未配置周期备份到第三方服务器的任务,将发送严重告警。 在用户创建元数据周期备份到第三方服务器的任务后,告警消除。 告警属性…

单链表相关面试题--1.删除链表中等于给定值 val 的所有节点

/* 解题思路:从头节点开始进行元素删除,每删除一个元素,需要重新链接节点 */ struct ListNode* removeElements(struct ListNode* head, int val) {if(head NULL)return NULL;struct ListNode* cur head;struct ListNode* prev NULL;while…

打造自己的3D模型AI 自动纹理工具

在线工具推荐: 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 为 3D 模型创建纹理可能比您想象的要容易。虽然注意细节很重要,但有很多方法可以制…

你好,我叫Python,欢迎你认识派森。(来自关于Python语言的全方位自我介绍。

文章目录 自我简介一、Python的发展历程二、Python的特色1.语言特色2.语法特色 三、Python2与Python3的比较1.print 函数2.Unicode3.除法运算4.异常5.八进制字面量表示6.不等运算符7.python 3.0严格使用tab键进行缩进 四、Python适用开发场景及成果1.应用领域2.Python开发出的应…

二百零六、Flume——Flume1.9.0单机版部署脚本(附截图)

一、目的 在实际项目部署时,要实现易部署易维护,需要把安装步骤变成安装脚本实现快速部署 二、部署脚本在Linux中文件位置 文件夹中只有脚本文件flume-install.sh和tar包apache-flume-1.9.0-bin.tar.gz 三、Flume安装脚本 #!/bin/bash #获取服务器名…

使用centos搭建内网的yum源

1.安装httpd服务 2.启动服务,设置开机自启 #启动服务 systemctl start httpd # 设置开机自动启动 systemctl enable httpd systemctl status httpd3.新建一个目录,将rpm文件放到该目录下 4.将/etc/httpd/conf/httpd.conf文件中的DocumentRoot "…

海康威视综合安防管理平台任意文件上传

系统介绍 HIKVISION iSecure Center综合安防管理平台是一套“集成化”、“智能化”的平台,通过接入视频监控、一卡通、停车场、报警检测等系统的设备,获取边缘节点数据,实现安防信息化集成与联动,公众号:web安全工具库…

【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

文章目录 前言1.调用形式2.LoadBalancerInterceptor3.负载均衡流程分析3.1 调用流程图3.2 intercept()方法3.3 execute()方法3.4 getServer()方法3.4 子类的chooseServer()方法3.5 getLoadBalancerStats().…

低代码平台全解析:衍生历程、优势呈现与未来趋势一览无余

在数字化时代,应用程序的开发与更新已成为企业保持竞争力的关键。传统的编码方式,虽然精细且功能强大,但耗时且要求开发者具备较高的技术水平。在这样的背景下,低代码开发平台的出现无疑为企业带来了福音。 低代码开发平台是一种创…

一文全面了解低代码

目录 一、低代码概况 二、低代码构成 三、低代码开发者 1)低代码赋能IT技术人员--低代码 2)低代码赋能业务人员--零代码 四、低代码核心技术概念 五、低代码能力 六、低代码技术应用价值及趋势 一、低代码概况 2014年,Forrester提出了低代码…

nvm的下载与使用

1.如果已经安装nodejs , 先卸载nodejs; 从控制面板中 卸载程序 卸载nodejs win r打开cmd ,管理员运行 where node 查看是否删除干净nodejs 2.下载nvm 从github 下载nvm , 下载nvm 3.nvm 和node安装路径最好写在同一个路径下 ,如D盘 ,D\a\nvm , D\a\nodejs 4.…

采购组件修改申请办理流程

现有采购流程1 #mermaid-svg-qAesAhfW2IQBcef8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-qAesAhfW2IQBcef8 .error-icon{fill:#552222;}#mermaid-svg-qAesAhfW2IQBcef8 .error-text{fill:#552222;stroke:#5522…

Linux:安装MySQL服务(非docker方式)

1、下载安装包 下载MySQL安装包,需要Oracle官网的账号 下面是网友提供的账号及密码,亲测有效。 账户:3028064308qq.com 我用的这个,可以登陆 密码:OraclePassword123!Oracle Account: 602205528qq.com Oracle Pass…

【原创】CentOS7.9解决mdadm组raid阵列后resync非常慢的问题

前言 前几日我买了4块16TB的硬盘使用mdadm组了一个raid10阵列,具体如何搭建的可以看我之前的博客。 【报错记录】疯狂踩坑之RockyLinux创建Raid1镜像分区,Raid分区在重启后消失了!外加华硕主板使用Raid模式后,硬盘在系统中无法找…

查询数据库DQL

DQL 查询基本语法 -- DQL :基本语法; -- 1查询指定的字段 name entrydate 并返回select name , entrydate from tb_emp;-- 2 查询 所有字段 并返回select id, username, password, name, gender, image, job, entrydate, create_time, update_time from tb_emp;-- 2 查询…

【技巧】Word和Excel如何互相转换?

Word文档里有数据表格,如果编辑修改起来感觉没那么方便或容易出错,不妨将文档转换成Excel表格再来处理。 将Word文档转换成Excel,比较常用的是复制粘贴方法,也就是将Word文档的表格复制后,再粘贴到Excel表格里&#x…