说在前面
平时工作中我们基本都会接触到excel数据表,但是在代码中使用和处理数据的时候通常都要先将其转为json格式数据,json格式的数据可以更加方便我们进行处理,那么我们要怎么将Excel数据转为JSON数据呢?
比如我们现在有这么一个Excel数据表:
我们需要将其转为JSON数据,并按地市进行分组:
1、导入模块
- 首先,通过
require导入了xlsx和fs模块。xlsx模块用于操作Excel文件,fs模块用于文件系统操作(如读取和写入文件)。
const xlsx = require("xlsx");
const fs = require("fs");
2、读取Excel文件
- 使用
xlsx.readFile函数读取指定路径("./file/地市区县.xlsx")下的Excel文件,并将结果存储在workBook变量中。
const workBook = xlsx.readFile("./file/地市区县.xlsx");
3、获取工作表数据并转换为JSON
- 从
workBook中获取名为Sheet1的工作表,并将其存储在变量sheet中。 - 然后使用
xlsx.utils.sheet_to_json函数将工作表数据转换为JSON格式,并存储在sheetJson变量中。
const sheet = workBook.Sheets["Sheet1"];
const sheetJson = xlsx.utils.sheet_to_json(sheet);
获取到的JSON数据如下:
4、构建地区映射对象
- 获取到Excel的JSON数据之后,我们还需要对数据进行处理,将同一地市的区县归并起来。
- 遍历
sheetJson中的每一项。对于每一项,检查respoolMap对象中是否已经存在对应的地市键。如果不存在,则创建一个空数组作为该地市的值;如果存在,则获取该数组。 - 将当前项的区县值添加到对应地市的数组中,并更新
respoolMap对象。
const respoolMap = {};
sheetJson.forEach((item) => {
const list = respoolMap[item.地市] || [];
list.push(item.区县);
respoolMap[item.地市] = list;
});
5、写入JSON文件
- 使用
fs.writeFileSync函数将respoolMap对象转换为格式化的JSON字符串(通过JSON.stringify(respoolMap,null, 2)),并写入到"./file/地市区县.json"文件中。
fs.writeFileSync(`./file/地市区县.json`, JSON.stringify(respoolMap,null, 2));
总体来说,就是通过xlsx读取一个Excel文件中的数据。然后将数据重新组织,以地市为键,其下属的区县列表为值,构建一个对象。最后将这个对象保存为一个JSON文件。
完整代码
const xlsx = require("xlsx");
const fs = require("fs");
const workBook = xlsx.readFile("./file/地市区县.xlsx");
const sheet = workBook.Sheets["Sheet1"];
const sheetJson = xlsx.utils.sheet_to_json(sheet);
const respoolMap = {};
sheetJson.forEach((item) => {
const list = respoolMap[item.地市] || [];
list.push(item.区县);
respoolMap[item.地市] = list;
});
fs.writeFileSync(`./file/地市区县.json`, JSON.stringify(respoolMap, null, 2));
这是一个读取Excel数据并转换为JSON的简单脚本,大家可以根据自己的需求进行微调使用
公众号
关注公众号『前端也能这么有趣』,获取更多有趣内容。
说在后面
🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『
前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。