Excel表格转Json数据结构
Excel表格转Json数据结构
辗转了好几个项目,每个项目的导表工具都巨难用,速度慢,潜规则多,扩展性差,不易于调试。Sqlite,Json,Lua,Xml各种格式都用过。
举个例子:
大多数导表工具不支持文本数组的解析,因为它们对数组的解析算法异常粗暴,无非就是一个Split(value, ","),当你的文本数组没有逗号时,一切都OK,一旦出现逗号,解析结果错误,但程序依旧正常运行,直到游戏中读取错误时,你才能意识到出问题了。
不能类型组合,通常这些导表工具都不支持类型之间的组合,例如整数数组,哈希数组等等。有的支持整数数组,但它并不是把整数和数组两个类型结合,而是单独定义了一个整数数组的类型,当需要稍微复杂一点的结构时,则不支持甚至完全不能实现,比如数组嵌套数组。
错误无法定位,输出的错误信息几乎没有看不懂,策划更是束手无策。
没有类型安全,当配置表的某个字段名被修改时,程序可能完全不知道,直到游戏中读取配置错误。
数据结构
在数据结构上我个人最理想的数据格式是Json。
Sqlite 对客户端不友善,大多数客户端对SQL语句并不熟悉。作为配置数据而言,关系数据库的优势并不明显,如果数据查询需要复杂的SQL语句,这个数据结构设计本身就是错误的,如果仅使用简单的SQL语句查询,那为什么不直接用Key-Value数据结构?此外,Sqlite需要用专门的数据库软件浏览,而不能直接在IDE或者文本编辑器中查看。
Lua 结构跟Json类似,但它有两个问题,1. 不容易区分数组和哈希,2. 作为数据结构而言,应用范围比较狭窄,Json比Lua出名太多,Json第三方解析库比Lua多太多,以至于大家更容易接受Json而非Lua。
Xml 太多额外数据,阅读相对于Json不直观。
Json 结构简洁,大多数文本编辑器可高亮内容,第三方解析库众多,流行范围广,前后端都容易接受。
易用性
我见过一次导表开销花掉1小时的,以至于没有人敢轻易尝试导出Excel,这个情况持续了1年,终结这个情况的并不是项目凉了,而是我重新实现了一个工具且完全它的解析格式,新的解析程序导出全部Excel只需10秒。
我见过Excel配置非常繁琐,众多潜规则,当你新建一份配置表时,你必须参考一份旧表,要不然你根本不知道该怎么填。
一个好用的导表工具
由于最近重返手游行业,于是想实现一个效率,扩展性,易用性,安全性都比较OK的导表工具。
格式 (详情请看Demo)
// 已支持的格式
bool 布尔值
number 数值
string 字符串
list 数组
dict 哈希
type 自定义结构
// 格式定义
bool b;
number n;
string s;
[number] n_list; // 数值数组 list<number> n_list;
{number} n_dict; // 数组哈希 dict<number> d_dict;
<number n, string s> type; // 自定义结构 struct {
// number n;
// string s;
// } type;
// 类型组合
[[number]] n_n_list; // 数组嵌套数组
{[number]} n_n_dict; // 哈希嵌套数组
<[number] n_list, {number} n_dict> type; // 数据格式如下:
// struct {
// list<number> n_list;
// dict<number> n_dict;
// } type;
错误定位 (详情请看Demo)
// 打印错误文件,行,列,出错原因
C:\Github\xlsx2json>export.py
> 异常: C:\Github\xlsx2json/in/cfg_2.xlsx | 5:2 | [bool]值错误 "
> ---Export End---
安全性 (详情请看Demo)
// 输出指定语言的数据结构(当前只支持C++和C#)
// 可通过Json库解析到对应的数据结构
var test = Json.From<config.Test>("test.json");
var n = test.n;
var s = test.s;
结束
执行文件:export.py
运行环境:Python3.0
运行依赖:openpyxl
导表配置 (export.py文件):
# Json输入目录
JSON_I = os.getcwd() + "/in/"
# Json输出目录
JSON_O = os.getcwd() + "/out/"
# 结构化输出目录
STRUCT_O = os.getcwd() + "/out/config.cs"
# 命名空间
NAMESPACE = "config"
Excel表格转Json数据结构的更多相关文章
- 工具分享:excel2json,将Excel表格转换为JSON
此次分享的是github上的一个开源小工具:excel2json,用于把Excel表转换成json对象,并保存到一个文本文件. 项目地址:https://github.com/neil3d/excel ...
- 个人永久性免费-Excel催化剂功能第90波-xml与json数据结构转换表格结构
在网络时代,大量的数据交互以xml和json格式提供,特别是系统间的数据交互和网络WebAPI.WebService接口的数据提供,都是通过结构化的xml或json提供给其他应用调用返回数据.若能提供 ...
- Python读取Json字典写入Excel表格的方法
需求: 因需要将一json文件中大量的信息填入一固定格式的Excel表格,单纯的复制粘贴肯定也能完成,但是想偷懒一下,于是借助Python解决问题. 环境: Windows7 +Python2.7 + ...
- Python Json分别存入Mysql、MongoDB数据库,使用Xlwings库转成Excel表格
将电影数据 data.json 数据通过xlwings库转换成excel表格,存入mysql,mongodb数据库中.python基础语法.xlwings库.mysql库.pymongo库.mongo ...
- Unity 3D读取Excel表格、导入信息、导出Json
Unity 3D读取/导入Excel表格 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
- 【游戏开发】Excel表格批量转换成lua的转表工具
一.简介 在上篇博客<[游戏开发]Excel表格批量转换成CSV的小工具> 中,我们介绍了如何将策划提供的Excel表格转换为轻便的CSV文件供开发人员使用.实际在Unity开发中,很多游 ...
- Python导出Excel为Lua/Json/Xml实例教程(三):终极需求
相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出Excel为Lua/Json/Xml实例教程(二):xlrd初体验 Python导出E ...
- Python导出Excel为Lua/Json/Xml实例教程(一):初识Python
Python导出Excel为Lua/Json/Xml实例教程(一):初识Python 相关链接: Python导出Excel为Lua/Json/Xml实例教程(一):初识Python Python导出 ...
- 用Java导出为excel表格
导出的是最基础的excel表格,没有任何样式. <input type="button" value="输出到Excel" onclick='output ...
随机推荐
- REVIT 卸载工具,完美彻底卸载清除干净revit各种残留注册表和文件
一些同学安装revit出错了,也有时候想重新安装revit的时候会出现这种本电脑windows系统已安装revit,你要是不留意直接安装,只会安装revit的附件,revit是不会安装上的.这种原因呢 ...
- 实现一个简易的HashMap
实现一个键的类型为int,值的类型为int的HashMap 输入一个T,表示操作次数: 之后每行接一个操作,可以包括插入.删除.修改.查询.清空.判断是否有这个键: 因为是刚学完随手敲的,所以功能粗糙 ...
- 【网上转载搜罗】本博客花里胡哨(划掉)效果js代码
<canvas class="fireworks" style="position:fixed;left:0;top:0;z-index:99999999;poin ...
- <JZOJ5941>乘
emmm还挺妙 不过我没想到qwq 考场上瞎写的还mle了心碎 把b分两..预处理下 O1询问qwq #include<cstdio> #include<iostream> # ...
- MyBatis之一级缓存及其一级缓存失效
定义: 一级缓存:本地缓存:与数据库同一次会话(sqlSession)期间查询到的数据会放在本地缓存中,如果以后要获取相同的数据直接从缓存中获取,不会再次向数据库查询数据一个SqlSession拥有一 ...
- 初识Machine Learning
What is Machine Learning 定义 Arthur Samuel:Field of study that gives computers the ability to learn w ...
- windows应用程序单实例
前言 这才第几天博客就跟不上了,看来一天一篇博客的目标还是有点大,写博客还是挺费时间的,写了不满意删,删完再写...直到自己没了耐心.今天先写个前言,实质性的内容明天再补吧.今天一天的收获还是挺多的, ...
- GCD学习 —— 三
学习学习dispatch_block,在向队列中添加任务时,可以直接在对应的函数中添加 block.但是如果想对任务进行操作,比如监听任务.取消任务,就需要获取对应的 block. 1 创建Blo ...
- 线程sleep,wait,notify,join,yield方法解析
线程的五种状态 线程从创建到销毁一般分为五种状态,如下图: 1) 新建 当用new关键字创建一个线程时,就是新建状态. 2) 就绪 调用了 start 方法之后,线程就进入了就绪阶段.此时,线程不会立 ...
- mysql JOIN查询
查询左表a,并且关联a表在b表中的关联,如果关联不存在也可以查出左表的,注:只查询a的部分列,和b的部分列 SELECT a.id, b.id as my FROM a LEFT JOIN b ON ...