Node.js读取本地CSV文件, 并且写入为JSON格式文件
使用的
Node.js版本是v14.18.1
使用的Node.js版本是v14.18.1
使用的Node.js版本是v14.18.1
下面使用到的API都是基于目前版本
1. 格式
1.1 项目文件夹格式

1.2 .CSV文件格式

2. 操作
fs.readdirSync('./static')用于读取static文件夹下面的所有文件dirs.filter(dir => /\.csv$/.test(dir))只需要以.csv结尾的文件new TextDecoder('gbk').decode(file)因为node不能识别中文字符, 使用该方法就可以处理中文乱码问题.split('\r\n')进行切割,就可以将每行数据分成一串字符串

getGBK[0].split(',')获取表头, 用于组装数据

if (childList.length === 1) break说明该数据是空数据格式- 外层循环时,需要注意
i=1开始, 因为不需要遍历表头数据
TextDecoder文档地址
readdirSync文档地址
readFileSync文档地址
writeFileSync文档地址
完整代码
const fs = require('fs')
const dirs = fs.readdirSync('./static')
dirs.filter(dir => /\.csv$/.test(dir)).forEach(dir => {
const file = fs.readFileSync(`./static/${fileName}`)
const getGBK = new TextDecoder('gbk').decode(file).split('\r\n')
// 获取表头, 用于组装数据
const headList = getGBK[0].split(',')
const headLen = headList.length
const gbkLen = getGBK.length
// 遍历文件, 注意是从 i = 1 开始, 因为不需要表头
for (let i = 1; i < gbkLen; i++) {
const gbkItem = getGBK[i]
const childList = gbkItem.split(',')
if (childList.length === 1) break // 说明该数据是空数据格式
const obj = {}
// 遍历表头数组
for (let j = 0; j < headLen; j++) {
const headItem = headList[j]
obj[headItem] = childList[j]
}
json.push(obj)
}
// 得到不需要文件后缀的名称
const getFile = fileName.split('.')[0]
// 写入文件数据
fs.writeFileSync(`./file/${getFile}.json`, JSON.stringify(json))
})
最后结果


5605

被折叠的 条评论
为什么被折叠?



