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

前言

在上篇《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") {//数组和对象都是 objectlet 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.mzph.cn/news/149982.shtml

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

相关文章

分享职业技术培训类型

职业技术培训类型包括:Python技术应用、人工智能应机器学习、大数据分析、机器学习。 一、“Python技术应用工程师” “Python技术应用工程师”职业技术认证是由工业和信息化部教育与考试中心推出一套专业化、科学化、系统化的人才考核标准,涉及在互…

【前端学java】Java中的异常处理(15)完结

往期回顾: 【前端学java】JAVA开发的依赖安装与环境配置 (0)【前端学java】java的基础语法(1)【前端学java】JAVA中的packge与import(2)【前端学java】面向对象编程基础-类的使用 (…

Windows系统搭建VisualSVN服务并结合内网穿透实现公网访问

目录 前言 1. VisualSVN安装与配置 2. VisualSVN Server管理界面配置 3. 安装cpolar内网穿透 3.1 注册账号 3.2 下载cpolar客户端 3.3 登录cpolar web ui管理界面 3.4 创建公网地址 4. 固定公网地址访问 总结 前言 SVN 是 subversion 的缩写,是一个开放源…

Chat GPT 用于论文润色,常用指令这里都全了

ChatGPT在多个方面对科研人员提供帮助,其中之一就是SCI论文润色,通过输入论文的摘要、引言或者段落,科研人员可获得ChatGPT生成的回复,包括修改建议、语法纠正、表达方式优化等。 指令润色 比如: 请帮我润色论文&am…

【【VDMA彩条显示实验之四 含C语言代码】】

VDMA彩条显示实验之四 含C语言代码 VTC 手册简介 所有的视频都需要有时序 有时序的地方就需要有 时序控制器 VTC的 主要作用是 产生 视频时序 相对于上一节 在这里 我们会理解的更多 观察 这个 HB 信号 其实这个和上一节的图片差不多 在 行同步信号 前面就是前沿 在 行同步…

基于SSM的高校毕业设计选题管理系统(有报告)。Javaee项目。

演示视频: 基于SSM的高校毕业设计选题管理系统(有报告)。Javaee项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构,通过Spring S…

可逆矩阵的性质

如果矩阵A可逆,那么它的逆矩阵也可逆,并且如果矩阵A可逆,假设是一个不为0的数,那么也可逆,并且如果矩阵A和都可逆,而且它们的阶数也相同,那么它们的乘积也是可逆的,并且如果矩阵A可逆…

详解SwinIR的论文和代码(SwinIR: Image Restoration Using Swin Transformer)

paper:https://arxiv.org/abs/2108.10257 code:https://github.com/JingyunLiang/SwinIR 目录 1. Swin Transformer layers1.1 局部注意力1.2 移动窗口机制1.3 关键代码理解 2. 整体网络结构2.1 浅层特征提取2.2 深层特征提取2.3 图像重建 3.总结 SwinI…

同城跑腿服务预约小程序的作用是什么

随着生活质量逐渐提升,围绕人们生活的行业或产品非常多,同时互联网赋能下,也出现了很多便捷人们日常消费的场景,如外卖服务、快递服务等。 跑腿仅依赖微信私聊及电话预约是很低效且容易出错及造成极大工作压力的,同时…

基于一致性算法的微电网分布式控制MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 本模型主要是基于一致性理论的自适应虚拟阻抗、二次电压补偿以及二次频率补偿,实现功率均分,保证电压以及频率稳定性。 一致性算法 分布式一致性控制主要分为两类:协调同…

Linux入门攻坚——6、磁盘管理——分区及文件系统管理

磁盘管理主要涉及分区的管理,以及分区后的文件系统管理。 磁盘的使用大体要分两步: 文件系统也是一个软件,根是自引用的。 文件系统的全局结构:物理格式: 一个磁盘刚被生产出来的时候,它里边没有划分扇区…

【Go入门】Web工作方式

【Go入门】 Web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢? 对于普通的上网过程,系统其实是这样做的&…

基于RK3588的8k多屏异显安卓智能网络机顶盒

采用RK3588芯片方案的8K网络机顶盒,搭载纯净的安卓12操作系统,支持Ubuntu和Debian系统容拓展。主要面向外贸市场。此款机顶盒自带两个HDMI输出接口,一个HDMI输入接口,内置双频WiFi6无线模块,支持千兆以太网和USB接口。…

【文末送书】十大排序算法及C++代码实现

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

微创机器人:CRM撬动售后服务数字化升级

一方面,我国医疗器械行业起步较晚,更注重产品的销售和业务的拓展,企业售后服务整体比较滞后。 另一方面,医疗器械售后服务环节数字化程度不足,一些企业仍通过传统的线下手段管理售后服务,进行数字化尝试的…

【快速解决】实验四 对话框 《Android程序设计》实验报告

目录 前言 实验要求 实验四 对话框 正文开始 第一步建立项目 第二步选择empty views activity点击next ​编辑 第三步起名字,点击finish 第四步对 activity _main.xml文件操作进行布局 第五步,建立两个新文件,建立方法如下 SecondA…

SLAM中提到的相机位姿到底指什么?

不小心又绕进去了,所以掰一下。 以我个人最直观的理解,假设无旋转,相机在世界坐标系的(5,0,0)^T的位置上,所谓“位姿”,应该反映相机的位置,所以相机位姿应该如下: Eigen::Matrix4d T Eigen::M…

亚马逊云科技AI创新应用下的托管在AWS上的数据可视化工具—— Amazon QuickSight

目录 Amazon QuickSight简介 Amazon QuickSight的独特之处 Amazon QuickSight注册 Amazon QuickSight使用 Redshift和Amazon QuickSightt平台构建数据可视化应用程序 构建数据仓库 数据可视化 Amazon QuickSight简介 亚马逊QuickSight是一项可用于交付的云级商业智能 (BI…

基于circle group的Reed-Solomon codes

1. 引言 Polygon团队Ulrich Habock等人2023年论文 Reed-Solomon codes over the circle group。 前序博客有: Plonky3 Mersenne素数域的Reed-Solomon codes设计 STARKs支持任意size的域,而不要求是椭圆曲线。STARKs中在选择域size时,越小…

Unity中 Start和Awake的区别

Awake和Start在Unity中都是MonoBehaviour脚本中的生命周期函数 Awake函数在游戏对象首次被加载时调用,在游戏对象初始化之前调用。 start函数在游戏对象初始化完成后调用,在update第一次执行前调用。 这两个函数在其生命周期内都只会调用一次&#xf…