Node.js讀取本地CSV文件并且寫(xiě)入為JSON格式文件過(guò)程
- 使用的
Node.js版本是v14.18.1 - 使用的
Node.js版本是v14.18.1 - 使用的
Node.js版本是v14.18.1
下面使用到的API都是基于目前版本
1. 格式
1.1 項(xiàng)目文件夾格式

1.2.CSV文件格式

2. 操作
fs.readdirSync('./static')用于讀取static文件夾下面的所有文件dirs.filter(dir => /\.csv$/.test(dir))只需要以.csv結(jié)尾的文件new TextDecoder('gbk').decode(file)因?yàn)?code>node不能識(shí)別中文字符, 使用該方法就可以處理中文亂碼問(wèn)題.split('\r\n')進(jìn)行切割,就可以將每行數(shù)據(jù)分成一串字符串

getGBK[0].split(',')獲取表頭, 用于組裝數(shù)據(jù)

if (childList.length === 1) break說(shuō)明該數(shù)據(jù)是空數(shù)據(jù)格式
外層循環(huán)時(shí),需要注意i=1開(kāi)始, 因?yàn)椴恍枰闅v表頭數(shù)據(jù)
完整代碼
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')
// 獲取表頭, 用于組裝數(shù)據(jù)
const headList = getGBK[0].split(',')
const headLen = headList.length
const gbkLen = getGBK.length
// 遍歷文件, 注意是從 i = 1 開(kāi)始, 因?yàn)椴恍枰眍^
for (let i = 1; i < gbkLen; i++) {
const gbkItem = getGBK[i]
const childList = gbkItem.split(',')
if (childList.length === 1) break // 說(shuō)明該數(shù)據(jù)是空數(shù)據(jù)格式
const obj = {}
// 遍歷表頭數(shù)組
for (let j = 0; j < headLen; j++) {
const headItem = headList[j]
obj[headItem] = childList[j]
}
json.push(obj)
}
// 得到不需要文件后綴的名稱
const getFile = fileName.split('.')[0]
// 寫(xiě)入文件數(shù)據(jù)
fs.writeFileSync(`./file/${getFile}.json`, JSON.stringify(json))
})
最后結(jié)果

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
服務(wù)端nodejs抓取jsonp接口數(shù)據(jù)實(shí)現(xiàn)示例
這篇文章主要為大家介紹了服務(wù)端nodejs抓取jsonp接口數(shù)據(jù)實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
node+koa2+mysql+bootstrap搭建一個(gè)前端論壇
本篇文章通過(guò)實(shí)例給大家分享了用node+koa2+mysql+bootstrap搭建一個(gè)前端論壇的步驟,有需要的朋友參考下。2018-05-05
基于Node實(shí)現(xiàn)可以操作MySQL的接口
這篇文章主要介紹了用Node寫(xiě)個(gè)可以操作MySQL的接口,以前也用Node寫(xiě)過(guò)接口,但不涉及數(shù)據(jù)庫(kù)操作,而我們發(fā)現(xiàn),后端寫(xiě)接口,基本都繞不開(kāi)數(shù)據(jù)庫(kù)操作,感覺(jué)不寫(xiě)一個(gè)能操作數(shù)據(jù)庫(kù)的接口,就不算真正意義上學(xué)會(huì)了寫(xiě)接口,那我們今天就學(xué)習(xí)一下,如何寫(xiě)一個(gè)可以操作數(shù)據(jù)庫(kù)的接口2024-05-05
nvm版本導(dǎo)致npm?install報(bào)錯(cuò)Unexpected?token?'.'的解決辦法
最近做項(xiàng)目遇到npm install 的問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于nvm版本導(dǎo)致npm?install報(bào)錯(cuò)Unexpected?token?'.'的解決辦法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
package.json的版本號(hào)更新優(yōu)化方法
這篇文章主要為大家介紹了package.json的版本號(hào)更新優(yōu)化方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
nodejs實(shí)現(xiàn)解析xml字符串為對(duì)象的方法示例
這篇文章主要介紹了nodejs實(shí)現(xiàn)解析xml字符串為對(duì)象的方法,涉及nodejs針對(duì)xml格式字符串的解析與轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下2018-03-03
運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記
這篇文章主要介紹了運(yùn)行Node.js的IIS擴(kuò)展iisnode安裝配置筆記,iisnode的擴(kuò)展可以把Node.js程序托管到IIS,托管之后也意味著可以使用IIS里面的各種功能,需要的朋友可以參考下2015-03-03

