[TOC] > Sat May 08 2021 13:28:06 GMT+0800 (GMT+08:00) WPS 不支持导入 JSON,也不支持输出为 JSON,本章节我们来实现将单元格区域的内容输出为 JSON。 > 为什么不是整表或者工作簿?也可以的,只是有点复杂,后续的章节会尝试去做。我知道怎么做,只是 JSON 是很“简单、丰富且严格”的文件格式,普通用户并不总是很严格地去处理表格数据,这会给生成 JSON 带来噩梦。再者性能可能是个瓶颈——怕 WPS 直接崩掉,内存可能也扛不住。 我们一个一个 JSON 模型地进行: ## 观察 members|No_a|No_b| ---|---|--- member1|10|12 member2|12|13 > 请开始欣赏我的散装英语…… ### byTable 基于表格 * without index of row. ```json [ {"member":"member1", "No_a":10, "No_b":12}, {"member":"member2", "No_a":12, "No_b":13} [ ``` * with index of row. ```json { "0": {"member":"member1", "No_a":10, "No_b":12}, "1": {"member":"member2", "No_a":12, "No_b":13} } ``` ### ByRowOnlyValue 基于行仅值 * withTitle 带上标题 ```json { "0": ["members","No_a", "No_b"], "1": ["member1", 10, 12], "2": ["member2", 12, 13] } ``` * withoutTitle 不带标题 ```json { "0": ["member1", 10, 12], "1": ["member2", 12, 13] } ``` * titleAsKeyByRow ```json { "0": {"member":"member1", "No_a":10, "No_b":12}, "1": {"member":"member2", "No_a":12, "No_b":13} } ``` ### ByColumn 基于列 * title as key without index of column. ```json { "members": ["member1","member2"], "No_a": [10,12], "No_b": [12,13] } ``` * onlyValue with index of column. ```json { "0": ["member1","member2"], "1": [10,12], "2": [12,13] } ``` * groupByValues ```json { "member1":[{"No_a":10, "No_b":12}], //... "12":[ {"member":"member1", "No_a":10, "No_b":12}, {"member":"member2", "No_a":12, "No_b":13} ], //... } ``` > JSON 可以灵活地将一个表格数据进行结构化处理。上面的例子并不是唯一解,也不仅仅这些模型,可以更简单或更丰富。 ## 请选择最“安全”的模型 不管你选择何种模型将表格 JSON 化,都应该尽可能保证生成的 JSON 可以保证数据的完整性。 * 如果要体现先后顺序,则应加上能体现先后顺序的key或者Value。 * 尽可能避开使用“纯值”构成的数组(Array),就怕一个 sort() 操作后,数据的一一对应关系全被打散,用也可以,在数组内加入能作为先后顺序的值或者键值对。 * 最好能保证可以可逆化操作——JSON 转表格。 > 其实你有更好的选择,网上有很多提供 .xls/.csv 文件转 JSON 的工具。 下一章节看代码实现。