node将Excel数据转为JSON

329 阅读3分钟

说在前面

平时工作中我们基本都会接触到excel数据表,但是在代码中使用和处理数据的时候通常都要先将其转为json格式数据,json格式的数据可以更加方便我们进行处理,那么我们要怎么将Excel数据转为JSON数据呢?

比如我们现在有这么一个Excel数据表:

我们需要将其转为JSON数据,并按地市进行分组:

1、导入模块

  • 首先,通过require导入了xlsxfs模块。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,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。