oops-framework框架 之 Excel转Json

引擎: CocosCreator 3.8.0

环境: Mac

Gitee: oops-plugin-excel-to-json

注: 作者dgflashoops-framework框架QQ群: 628575875


配置


作者dgflashoops-framework的框架中,提供了关于Excel数据表转换为Json和TypeScript的插件。

大概步骤:

  1. 通过终端命令进入项目目录内
  2. 运行命令:
./update-oops-plugin-excel-to-json.sh
  1. 下载成功后,在项目目录的 extensions 中会出现一个 oops-plugin-excel-to-json 的文件夹

  2. 在CocosCreator编译器的 扩展管理器 中,打开已安装拓展,标记部分打开
    请添加图片描述

  3. 打开项目设置, 左侧标签选择 Excel to Json, 配置Excel目录、Json输出目录、TypeScript输出目录
    请添加图片描述

注: Excel数据表,一般不在编译器中使用,故此放在assets目录以外

注: PathJsonServer和PathTsServer主要应用于服务器使用

  1. 在框架的示例项目的excel目录下,有着现有的表,暂时先使用Language.xlsx多语言表
    请添加图片描述

注: 【key】 不可取消,它被用于转换JSON的主要标记之一

  1. 编译器中,点击: 扩展 --> Oops Framework Excel to Json 会开始进行转换, 转换成功后,控制台会生成类似日志:
客户端数据 生成成功 ../oopsFrameworkDemo/assets/resources/game/config/Language.json
  1. 在配置的Json和TypeScript的目录下,生成Language.jsonTableLanguage.ts ,至此配置结束。

Excel表配置规则


增加下示例项目提供的RoleJob
请添加图片描述

主要规则如下:

  • 第一行为字段中文名
  • 第二行为字段英文名,会生成为json数据的字段名
  • 第三行为字段数据类型,只支持int、float、string、any类型
  • 第四行标记输出服务器数据时,是否存在这个字段"server"为显示字段,"server_no"为删除字段
  • 第五行标记输出客户端数据时,是否存在这个字段"client"为显示字段,"client_no"为删除字段

注: 如果数据类型不满足需求, 可通过oops-plugin-excel-to-json/dist/ExcelToJson.js进行修改

生成的Json字段:

{
  "1": {
    "armsName": "剑客",
    "weaponType": [1],
    "power": 8,
    "agile": 2
  },
  "5": {
    "armsName": "刺客",
    "weaponType": [10, 11, 12],
    "power": 5,
    "agile": 10
  },
  "9": {
    "armsName": "长弓手",
    "weaponType": [5],
    "power": 5,
    "agile": 8
  }
}

注: Json字段生成的格式类似于: {[“id”] = {}}

生成的TypeScript脚本:

export class TableRoleJob {
  static TableName: string = "RoleJob";
  private data: any;

  init(id: number) {
    var table = JsonUtil.get(TableRoleJob.TableName);
    this.data = table[id];
    this.id = id;
  }

  /** 编号【KEY】 */
  id: number = 0;

  /** 职业名 */
  get armsName(): string {
    return this.data.armsName;
  }
  /** 武器类型 */
  get weaponType(): any {
    return this.data.weaponType;
  }
  /** 力量 */
  get power(): number {
    return this.data.power;
  }
  /** 敏捷 */
  get agile(): number {
    return this.data.agile;
  }
}

注: TypeScript并非获取所有的数据,而是通过id获取Json配置表中的指定ID字段数据


JsonUtil


cocosCreator引擎支持对Json配置表的动态加载,主要示例代码:

resources.load('gameGiftJson', (err: any, res: JsonAsset) => {
  if (err) {
    return console.error(err.message);
  }
  // 获取到 Json 数据
  const jsonData: object = res.json!;
})

oops-framework的框架中,封装了Json数据表工具: JsonUtil,主要接口有:

接口说明
load(name, callback)通过名字加载Json数据表,资源加载完成调用回调
loadAsync(name)通过名字异步加载Json数据表
get(name)通过名字从缓存中获取Json数据
release(name)通过名字释放资源

注:loadloadAsync的实现跟resources.load实现类似。

在框架将Excel表通过插件导出Json和TypeScript表后,获取的指定字段就是通过JsonUtil中获取的:

// TableRoleJob.ts
init(id: number) {
  var table = JsonUtil.get(TableRoleJob.TableName);
  this.data = table[id];
  this.id = id;
}

示例


应用Excel表中的数据,框架提供了多种的支持,以RoleJob表生成的Json和TypeScript为例:

// 引用
import { JsonUtil } from "../../../../../extensions/oops-plugin-framework/assets/core/utils/JsonUtil";
import { TableRoleJob } from "../../common/table/TableRoleJob";
  • 方式1: 通过JsonUtil.load获取
let tableName = TableRoleJob.TableName;
JsonUtil.load(tableName, (jsonData) => {
  console.log("表数据:", jsonData);
})
  • 方式2: 先在Loading页面进行异步加载,然后通过JsonUtil或者配合TableRoleJob的方式使用
// 在Loading页面提前加载, 参考LoadingViewComp.ts
private loadCustom() {
  return new Promise(async (resolve, reject) => {
    await JsonUtil.loadAsync(TableRoleJob.TableName);
    resolve(null);
  });
}

let roleJobId = "1";
// 使用JsonUtil的get方式获取
let data = JsonUtil.get(roleJobId);
// 使用生成的TypeScript来构建
let tableRole = new TableRoleJob();
tableRole.init(id);
  • 方式3: 数据已经加载,想获取Json数据表,然后获取指定的数据字段
// 获取Json数据
let tableName = TableRoleJob.TableName;
let table = JsonUtil.get(tableName);
// 遍历,获取需要数据
for (let roleId in table) {
	let roleData = table[roleId];
	// ...
}
// 获取表长度,因数据结构类似于Map, 可这样:
let len = Object.keys(table).length;

感谢作者dgflash的分享,作者CSDN博客: dgflash CSDN

最后,祝大家学习和生活愉快!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

typora中显示除号的问题

问题 在latex中“除号( \div )” 通常用 \div。但在typora中写数学公式时,却发现 “除号” 如果使用 \div 并没有显示为 “ \div ”,而是 “ ∇ ⋅ \nabla \cdot ∇⋅ ”。 原因 typora中,\div 显示为 ∇ ⋅ \…

Html转PDF,前端JS实现Html页面导出PDF(html2canvas+jspdf)

Html转PDF,前端JS实现Html页面导出PDF(html2canvasjspdf) 文章目录 Html转PDF,前端JS实现Html页面导出PDF(html2canvasjspdf)一、背景介绍二、疑问三、所使用技术html2canvasjspdf 四、展示开始1、效果展示…

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类,用户只要创建这些类的对象,使用相应的方法,即使不具备有关的网络支持,也可 以编写出高质量的网络…

pyinstaller 常用命令参数

PyInstaller是一个用于将Python程序打包成独立的可执行文件的工具。它可以将Python代码和所有依赖的库、资源文件等打包成一个单独的可执行文件,方便在不安装Python解释器的环境中运行。PyInstaller提供了许多参数,用于配置打包过程和生成的可执行文件的…

NSS [NSSCTF 2022 Spring Recruit]babyphp

NSS [NSSCTF 2022 Spring Recruit]babyphp 考点&#xff1a;PHP特性 开局源码直接裸奔 <?php highlight_file(__FILE__); include_once(flag.php);if(isset($_POST[a])&&!preg_match(/[0-9]/,$_POST[a])&&intval($_POST[a])){if(isset($_POST[b1])&&…

java--Date、SimpleDateFormat时间类,JDK8之前的

1.Date 代表的是日期和时间 2.SimpleDateFormat 代表简单日期格式化&#xff0c;可以用来把日期对象、时间毫秒值格式化成我们想要的形式。 3.时间格式常见符号 4.SimpleDateFormat解析字符串时间成为日期对象

Redis之IO多路复用模型

Redis之IO多路复用模型 多路复用要解决的问题 解决同步阻塞IO模型下大量线程创建导致资源的浪费问题 同步阻塞IO模式的特点就是用一个进程来处理一个网络连接(一个用户请求)&#xff0c;比如一段典型的示例代码如下。 直接调用 recv 函数从一个 socket 上读取数据。 int main…

语义分割 简介及数据集简介

参考文章 MS COCO数据集介绍以及pycocotools简单使用-CSDN博客

Linux7安装tomcat9.0.83教程

1.下载tomcat.tar.gz包 地址&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloads 2.将包上传到linux服并解压 cd /home/local # 跳转到上传包的目录 tar -zxvf apache-tomcat-9.0.83.tar.gz # 解压包 mv apache-tomcat-9.0.83 tomcat # 重命名目录为tomcat cp …

【PUSDN】SpringBoot的jar进行解压后,替换其中的文件重新生成新的jar-SW

当你解压Spring Boot的JAR文件时&#xff0c;实际上是在打开一个压缩文件&#xff0c;类似于ZIP。你可以按照以下步骤进行替换文件并重新生成新的JAR&#xff1a; 解压原始的JAR文件&#xff1a; 使用任何ZIP工具&#xff08;如WinRAR、7-Zip或命令行工具&#xff09;&#xf…

详解异常 ! !(对异常有一个全面的认识)

【本章目标】 1. 异常概念与体系结构 2. 异常的处理方式 3. 异常的处理流程 4. 自定义异常类 1. 异常的概念与体系结构 1.1 异常的概念 在生活中&#xff0c;一个人表情痛苦&#xff0c;出于关心&#xff0c;可能会问&#xff1a;你是不是生病了&#xff0c;需要我陪你去看医…

在线测试http接口,为您解析最佳测试方法

您是否正在寻找一种方便、高效且可靠的方法来测试您的http接口&#xff1f;在这篇文章中&#xff0c;我们将为您介绍在线测试http接口的最佳方法&#xff0c;帮助您确保您的接口在各种情况下都能正常运行。 什么是http接口&#xff1f; 在开始介绍如何测试http接口之前&#x…

AG1KLPQ48 User Manual

1.&#xff09;软件安装&#xff1a; 解压缩或执行安装文件&#xff0c;安装 Supra 软件。执行文件为 bin 目录中的 Supra.exe。 运行 Supra&#xff0c;选择菜单 File -> Import license&#xff0c;选择 license 文件并导入 License。 2.&#xff09;新建项目&#xff1a;…

掌握iText:轻松处理PDF文档-进阶篇

简体中文写入 iText本身对简体中文的支持有限&#xff0c;但可以通过引入额外的字体包来增强其对简体中文的支持。例如&#xff0c;可以使用iTextAsian.jar这个亚洲字体包&#xff0c;它包含了几种简单的亚洲字体&#xff0c;其中包括简体中文字体。只需要将iTextAsian.jar放到…

Star CCM+ 停止并保存用命令行运行的计算

在 StarCCM 命令行运行 中介绍了命令行运行计算的方法&#xff0c;有网友询问停止计算的命令&#xff0c;但计算一旦提交之后应该是不能用命令结束的&#xff0c;除非是用 kill 或任务管理器直接结束进程。然而&#xff0c;直接结束进程不会自动保存计算结果。 问题 通常情况下…

tidb安装 centos7单机集群

安装 [rootlocalhost ~]# curl --proto https --tlsv1.2 -sSf https://tiup-mirrors.pingcap.com/install.sh | sh [rootlocalhost ~]# source .bash_profile [rootlocalhost ~]# which tiup [rootlocalhost ~]# tiup playground v6.1.0 --db 2 --pd 3 --kv 3 --host 192.168.1…

【C++】C++中的String类详解及模拟实现示例

文章目录 string类简介string类的基本用法string类的常用方法string类的优势 string类的模拟实现存储结构头文件string.h源文件string.cpp源文件test.cpp string类简介 string类简介在C编程中&#xff0c;字符串是一种非常常见的数据类型&#xff0c;用于存储文本信息。C标准库…

用 Python 自动创建 Markdown 表格

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Markdown表格是文档中整理和展示数据的重要方式之一。然而&#xff0c;手动编写大型表格可能会费时且容易出错。本文将介绍如何使用Python自动创建Markdown表格&#xff0c;通过示例代码详细展示各种场景下的创建…

Java 何时会触发一个类的初始化

Java 何时会触发一个类的初始化&#xff1f; 使用new关键字创建对象访问类的静态成员变量 或 对类的静态成员变量进行赋值调用类的静态方法反射调用类时&#xff0c;如 Class.forName()初始化子类时&#xff0c;会先初始化其父类&#xff08;如果父类还没有进行过初始化的话&a…

【Java】I/O流—File类:从0到1的全面解析

&#x1f38a;专栏【Java】 &#x1f33a;每日一句:看不清楚未来时,就比别人坚持久一点 ⭐欢迎并且感谢大家指出我的问题 目录 1.File概述 2.File构造方法 (1).根据文件路径创建文件对象 (2).根据父路径名字符串和子路径名字符串创建对象 (3).根据父路径对应文件对象和子路…