Excel转JSON工具实战:从表头类型到批量转换的避坑指南
简介:这是一款面向开发者与数据处理人员的Excel转JSON桌面小工具,以exe可执行程序形式提供,解决Excel表格数据向JSON格式快速迁移的问题,适用于API接口开发、数据分析、Web服务数据交换等场景,对需要批量整理表格数据的初中级开发者尤为友好。压缩包共31个文件,约5.44MB,包含可执行程序、动态链接库及C++工程源码文件,既有可直接运行的成品,也保留了工程结构便于二次开发与学习。目前已有1021人学习下载。工具围绕行与对象、列与属性、工作表与数组的对应关系完成转换,读者可借此理解Excel与JSON的结构映射,并留意数值、日期、布尔值等数据类型差异及空白行列清理等细节,从而提升数据转换效率。
1. 一个 exe 双击下去,Excel 表就变成了 JSON
上周帮朋友处理一个数据导入的活儿:运营那边给了一张 3000 多行的 Excel 配置表,字段有中文表头、有合并单元格、还有几列是“1/0”表示开关,前端要的是标准 JSON 数组。手动复制粘贴显然不现实,写 Python 脚本吧,对方电脑上连环境都没有。最后我翻出一个 Excel 转 JSON 的 exe 小工具,双击、选文件、点转换,三秒钟出结果,直接丢给前端就能用。
这类 excel2json、exceltojson 工具的价值就在这儿——它把“读表、识别表头、处理类型、拼 JSON”这一串动作封进一个可执行文件里,不依赖 Office 宏,也不用装 Python 或 Node。适合谁?做数据导入的、做游戏配置表的、做后台批量初始化的,以及像我这样临时被拉去救火、不想为一次转换搭环境的。下面按“它到底怎么工作、参数怎么设、哪些表会翻车”拆开讲。
2. 先搞懂转换逻辑:表头、类型和嵌套是怎么被读出来的
很多人拿到 exe 就直接双击,结果转出来的 JSON 键名是“列1、列2”,或者数字全变成了字符串。问题不在工具,在于没搞清它读表的规则。这类工具的核心逻辑其实就三步:定位表头行 → 推断每列的数据类型 → 按行拼装对象。搞懂这三步,后面所有参数你都能自己推。
2.1 表头行与数据起始行的判定
绝大多数 excel2json 工具默认把第一行当表头,从第二行开始读数据。但实际业务表经常不是这样:有的表第一行是大标题“XX系统配置表”,第二行才是真表头;有的表前面还有说明文字。这时候你要在工具里指定“表头所在行”。
常见做法是工具界面上有个“Header Row”或“表头行号”的输入框,填 2 就表示第二行是表头。判断依据很简单:打开 Excel,数一下从最顶上往下第几行是那排字段名,就填几。数据起始行一般是表头行 +1,部分工具允许单独设“Data Start Row”,用于表头和数据之间还夹了一行单位说明的情况。
提示:表头行一旦设错,转出来的 JSON 键名会整体错位,而且不会报错,属于最隐蔽的坑。转换前先拿 3 行小样本试一次,看键名对不对。
2.2 列类型推断:数字、布尔、字符串的边界
这是最容易翻车的地方。工具推断类型的常见规则是:整列看起来都是数字就当 number,都是 true/false 或 1/0 就当 boolean,否则当 string。但“看起来”这件事很玄学——比如一列 ID 是001、002,工具很可能识别成数字 1、2,前导零直接丢了;再比如一列全是1和0,它可能给你转成布尔,但你本意是状态码。
所以正规一点的工具会提供列类型覆盖功能,通常是一个“列名:类型”的配置,比如:
id:string status:int enabled:bool price:float这段配置的含义是:id强制按字符串处理(保住前导零),status按整数,enabled按布尔,price按浮点。填在哪?多数 exe 工具在界面上有个“高级设置/类型映射”的文本框,或者支持读取一个同名的.ini/.json配置文件。没有这个功能的工具,遇到 ID 列就只能事后手动补零,很痛苦,选型时优先挑带类型覆盖的。
2.3 扁平表与嵌套结构的取舍
大部分 exe 工具输出的是扁平 JSON 数组,一行一个对象:
[ {"id": "001", "name": "张三", "status": 1}, {"id": "002", "name": "李四", "status": 0} ]但前端有时要的是按某个字段分组、或者带一层{"data": [...]}包装的结构。这类工具一般支持两种附加能力:一是“根节点名”设置,填data就输出{"data": [...]};二是“分组字段”,指定某列后按该列的值做 key 聚合成对象。如果你的表需要多层嵌套(比如订单里嵌商品列表),单靠扁平转换工具做不到,得用支持“多表关联/子表”的版本,或者转完再用脚本二次加工。选型时先想清楚目标 JSON 是数组还是对象、要不要分组,别等转完才发现结构不对。
3. 上手实操:从一张配置表到可用的 JSON 文件
理论清楚了,落到操作。这一章按“准备表 → 配参数 → 转换 → 校验”走一遍,中间给两段能直接抄的辅助脚本,用来处理工具搞不定的边角情况。
3.1 转换前的表结构整理清单
exe 工具再智能,也救不了一张脏表。转换前花五分钟做这几件事,能省掉后面半小时排错:
- 删掉合并单元格。合并单元格在解析时只有左上角有值,其余是空,转出来就是一堆 null。先取消合并、把值补齐。
- 清掉表头上方的标题行和空行,或者记下真实表头在第几行,待会儿填进工具。
- 检查隐藏列和隐藏行。有些工具会连隐藏列一起读,转出一堆莫名其妙的键;转换前把不用的列删掉,别只是隐藏。
- 统一空值写法。一列里有的空格、有的写
null、有的写-,类型推断会乱。统一留空或统一写一个占位符。 - 另存为 xlsx。老式
.xls部分工具支持不全,另存成.xlsx最稳。
整理完,表应该是“第一行纯字段名、下面纯数据、无合并、无隐藏”的干净状态。
3.2 工具参数逐项设置与一次完整转换
打开 exe,界面通常就这几项:输入文件、输出路径、表头行、数据起始行、根节点名、类型映射、是否格式化输出。逐项说怎么填:
| 参数 | 填法 | 说明 |
|---|---|---|
| 输入文件 | 选整理好的 xlsx | 路径别带中文和空格,部分工具有编码问题 |
| 输出路径 | 同目录下xxx.json | 覆盖前先备份旧文件 |
| 表头行 | 数出来的行号,常见填 1 | 填错键名整体错位 |
| 数据起始行 | 一般表头行+1 | 中间有单位行时手动加 |
| 根节点名 | 留空输出数组,填data输出对象 | 按前端要求选 |
| 类型映射 | 按 2.2 的格式填 | ID 列务必写 string |
| 格式化 | 勾选 | 带缩进便于人看,体积大一点 |
点转换后,先别急着交付。打开输出的 JSON,抽查三件事:第一条对象的键名是不是你表里的字段名、ID 列的前导零还在不在、布尔列是不是真的布尔而不是字符串"true"。这三项对了,基本就稳了。
3.3 用一段 Python 做转换后校验
工具不报错不代表数据对。我一般会跑一段校验脚本,检查行数是否一致、有没有意外空值、类型是否符合预期。这段脚本不依赖第三方库,装没装 pandas 都能跑:
import json # 读取工具输出的 JSON with open("output.json", "r", encoding="utf-8") as f: data = json.load(f) # 如果根节点是对象,取出数组 rows = data["data"] if isinstance(data, dict) else data print("总行数:", len(rows)) # 检查关键字段:ID 是否为字符串且保留前导零 bad_id = [r for r in rows if not isinstance(r.get("id"), str)] print("ID 类型异常行数:", len(bad_id)) # 检查布尔列是否真的是 bool bad_bool = [r for r in rows if not isinstance(r.get("enabled"), bool)] print("布尔列异常行数:", len(bad_bool)) # 检查空值分布 for key in rows[0].keys(): empty = sum(1 for r in rows if r.get(key) in (None, "")) if empty: print(f"字段 {key} 空值数: {empty}")逻辑说明:先兼容“数组”和“带根节点对象”两种输出形态;然后针对最容易出错的 ID 类型和布尔类型做类型断言,isinstance判断比肉眼扫快得多;最后统计每个字段的空值数,空值集中出现在某列,往往说明那列在 Excel 里是合并单元格或隐藏列没清干净。参数上把id、enabled换成你表里的真实字段名即可,字段多就循环一遍。
3.4 批量转换多个 sheet 的处理方式
一张工作簿里往往有多个 sheet,每个 sheet 对应一张配置表。单文件工具通常只转“当前 sheet”或“第一个 sheet”,批量就得手动切。两种做法:一是工具若支持“遍历所有 sheet”,勾上后输出文件名会自动加 sheet 名后缀;二是不支持的话,先把每个 sheet 另存成独立 xlsx,再用命令行批量调用。
如果这个 exe 支持命令行参数(很多工具有隐藏的 CLI 模式,工具.exe -i 输入 -o 输出),可以写个批处理:
# 遍历当前目录所有 xlsx,逐个转换 for f in *.xlsx; do ./excel2json.exe -i "$f" -o "${f%.xlsx}.json" --header 1 --id-column id:string done这段 bash 的含义:for循环取当前目录每个 xlsx;${f%.xlsx}是去掉扩展名拼输出名;--header 1指定表头行;--id-column id:string是类型覆盖的常见写法。具体参数名以工具实际帮助为准,先跑工具.exe --help看一眼。批量转换最大的好处是口径统一,不会这张表设了类型、那张表忘了设。
4. 避坑与排查:那些转完才发现不对的情况
工具用顺了很快,但翻车往往发生在“以为没问题”的时候。下面五条是我和朋友实际踩过的,按现象、原因、解决写,照着对号入座能省不少时间。
4.1 现象:ID 前导零消失,001 变成 1
原因:工具把整列推断成数字类型,数字没有前导零的概念。解决:在类型映射里把该列强制写成string;如果工具不支持类型映射,在 Excel 里把该列设成文本格式再转,或者转完后用脚本补零。根治办法是选型时就挑带类型覆盖的工具。
4.2 现象:转出来的 JSON 键名是“列1、列2”
原因:表头行设错了,工具把数据行当成了表头,或者表头上方有标题行导致偏移。解决:打开 Excel 数清真实表头在第几行,填进“表头行”参数;同时确认表头上方没有空行干扰。改完先转 3 行样本验证键名。
4.3 现象:某些行整行是 null 或字段大量缺失
原因:Excel 里有合并单元格,解析时只有左上角有值;或者有隐藏列被一起读入但无数据。解决:转换前取消所有合并单元格并补齐值,删掉不用的隐藏列。已经转完的,用 3.3 的空值统计脚本定位是哪几列出的问题,回表修。
4.4 现象:布尔列变成字符串 "true"/"false",前端判断失效
原因:Excel 里那列写的是文本true/false而不是真正的布尔,或者工具默认全按字符串输出。解决:统一在表里用1/0并在类型映射里写bool;若工具不支持,转完后用脚本做一次类型转换。前端拿到字符串"false"做if判断会恒为真,这个坑很隐蔽。
4.5 现象:中文乱码或特殊字符变成问号
原因:输出编码不是 UTF-8,或者输入文件路径含中文导致读取异常。解决:工具若有“输出编码”选项选 UTF-8;输入输出路径尽量用英文和数字,别带空格;转完用编辑器确认文件编码。乱码一旦进了下游系统,排查成本很高,转换后第一件事就是打开看一眼中文。
5. 进阶:把一次性转换变成可复用的数据管道
单次转换解决的是“这一张表”,但配置表是会迭代的——运营改一版、加两列、调几个值,你就得再转一次。真正省事的做法是把 exe 嵌进一条小管道:Excel 放固定目录,转换脚本定时或手动触发,输出直接进版本库,配合校验脚本卡住不合格的数据。
具体可以这么搭:建三个目录input/、output/、backup/;写一个批处理先备份旧 JSON,再调 exe 转换,最后跑 3.3 的校验脚本,校验不通过就回滚备份。这样每次改表只需把新 xlsx 丢进input/,跑一下批处理,坏数据进不了下游。参数上把表头行、类型映射固化在批处理里,避免每次手填不一致——口径统一比工具本身更重要。
再进一步,如果团队里多人维护配置表,可以在 Excel 里加一列“版本号”,转换后用脚本比对前后两版的差异,只输出变更的行给下游做增量更新。这一步不是所有场景都需要,但数据量大、更新频繁时能明显减少全量导入的压力。
血泪经验是:别信“转完看着差不多就行”。我吃过一次亏,一张表里 ID 列混了几个带字母的值,工具整列推断成字符串,结果纯数字的那些行在前端排序时全乱了,上线后才发现。从那以后我每次转换都强制走一遍“类型断言 + 空值统计 + 中文抽查”三件套,宁可多花两分钟,也不让脏数据流到下游。希望这套流程帮到你,下次拿到一张 Excel 要转 JSON 时,先想清楚表头、类型、结构这三件事,再双击那个 exe。
本文还有配套的精品资源,点击获取