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.hqwc.cn/news/197586.html

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

相关文章

【数据科学】Python开源库数据集大全(附代码)

目录 工具库介绍scikit-learnstatsmodelsSeabornPyTorchTensorFlow DatasetsKerasNLTK参考链接 工具库介绍 为了使初学者更容易入门,许多开源库提供了丰富而标准化的示例数据集,其中包括scikit-learn、NLTK、TensorFlow Datasets、Keras Datasets、Stat…

JDY蓝牙注意事项

波特率设置:9600,不接受115200,或者38400. 不同于WiFi测试,jdy蓝牙不接受AT"指令,可以使用“ATVERSION"指令测试 安信可公司的那个蓝牙指令在这里没有用,不知道是不是生产的公司不一样

Azure Machine Learning - 什么是 Azure AI 搜索?

Azure AI 搜索(以前称为“Azure 认知搜索”)在传统和对话式搜索应用程序中针对用户拥有的内容提供大规模的安全信息检索。 关注TechLead,分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦…

三、机器学习基础知识:Python常用机器学习库(图像处理相关库)

文章目录 1、OpenCV1.1 窗口操作函数1.2 图像处理1.3 图像捕获与人脸检测 2、PIL2.1 主要函数2.2 表情图像合成2.3 手写数字转换2.4 滤波查找图像边缘 1、OpenCV OpenCV Python是一个用于解决计算机视觉问题的Python库,是用基于C实现的OpenCV构成的Python包。OpenC…

【已解决】移动号码在移动网上营业厅更换为8元保号套餐

有很多人的副卡基本是为了接收银行卡短信,平时基本不打电话和用流量,每个月固定消费在18-30左右,很浪费。今天发现在网上营业厅就可以修改8元保号套餐,分享给大家。 保号套餐 有以下两种: 解决办法: 1、…

【前端学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 的缩写,是一个开放源…

15.ORACLE11g的归档方式和日志文件的相关操作

ORACLE11g的归档方式和日志文件的相关操作 一、什么是日志文件1、在线日志文件2、归档日志文件 二、Oracle 11g 归档方式:1、归档方式状态2、归档日志方式下数据库的工作原理3、配置归档日志方式3.1 开启归档模式3.2 日志文件相关操作: 4、oracle11g联机…

Java的IO流-打印流

打印流 PrintStream public void println()自动换行 PrintWriter package com.itheima.println;import java.io.FileInputStream; import java.io.PrintStream; import java.io.PrintWriter;public class Test2 {public static void main(String[] arg…

分享职业技术培训类型

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

Redis ACL 规则说明

Redis ACL 规则说明 前情回顾ACL 定义规范启用和禁用用户允许和禁止调用命令允许或禁止访问某些 Key为用户配置有效密码 ACL 命令说明 前情回顾 上一篇文章 我们整体性的介绍了 Redis 的 ACL,我们来回顾下 ACL 的两种配置方式。 redis 使用 acl 有两种方式可以配置…

使用centos搭建内网的yum源

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