node將Excel數(shù)據(jù)轉(zhuǎn)為JSON的示例代碼
說在前面
比如我們現(xiàn)在有這么一個(gè)Excel數(shù)據(jù)表:
我們需要將其轉(zhuǎn)為JSON數(shù)據(jù),并按地市進(jìn)行分組:
1、導(dǎo)入模塊
- 首先,通過
require
導(dǎo)入了xlsx
和fs
模塊。xlsx
模塊用于操作Excel文件,fs
模塊用于文件系統(tǒng)操作(如讀取和寫入文件)。
2、讀取Excel文件
- 使用
xlsx.readFile
函數(shù)讀取指定路徑("./file/地市區(qū)縣.xlsx"
)下的Excel文件,并將結(jié)果存儲(chǔ)在workBook
變量中。
const workBook = xlsx.readFile("./file/地市區(qū)縣.xlsx");
3、獲取工作表數(shù)據(jù)并轉(zhuǎn)換為JSON
- 從
workBook
中獲取名為Sheet1
的工作表,并將其存儲(chǔ)在變量sheet
中。 - 然后使用
xlsx.utils.sheet_to_json
函數(shù)將工作表數(shù)據(jù)轉(zhuǎn)換為JSON格式,并存儲(chǔ)在sheetJson
變量中。
const sheet = workBook.Sheets["Sheet1"]; const sheetJson = xlsx.utils.sheet_to_json(sheet);
獲取到的JSON數(shù)據(jù)如下:
4、構(gòu)建地區(qū)映射對象
- 獲取到Excel的JSON數(shù)據(jù)之后,我們還需要對數(shù)據(jù)進(jìn)行處理,將同一地市的區(qū)縣歸并起來。
- 遍歷
sheetJson
中的每一項(xiàng)。對于每一項(xiàng),檢查respoolMap
對象中是否已經(jīng)存在對應(yīng)的地市鍵。如果不存在,則創(chuàng)建一個(gè)空數(shù)組作為該地市的值;如果存在,則獲取該數(shù)組。 - 將當(dāng)前項(xiàng)的區(qū)縣值添加到對應(yīng)地市的數(shù)組中,并更新
respoolMap
對象。
const respoolMap = {}; sheetJson.forEach((item) => { const list = respoolMap[item.地市] || []; list.push(item.區(qū)縣); respoolMap[item.地市] = list; });
5、寫入JSON文件
- 使用
fs.writeFileSync
函數(shù)將respoolMap
對象轉(zhuǎn)換為格式化的JSON字符串(通過JSON.stringify(respoolMap,null, 2)
),并寫入到"./file/地市區(qū)縣.json"
文件中。
fs.writeFileSync(`./file/地市區(qū)縣.json`, JSON.stringify(respoolMap,null, 2));
總體來說,就是通過xlsx讀取一個(gè)Excel文件中的數(shù)據(jù)。然后將數(shù)據(jù)重新組織,以地市為鍵,其下屬的區(qū)縣列表為值,構(gòu)建一個(gè)對象。最后將這個(gè)對象保存為一個(gè)JSON文件。
完整代碼
const xlsx = require("xlsx"); const fs = require("fs"); const workBook = xlsx.readFile("./file/地市區(qū)縣.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.區(qū)縣); respoolMap[item.地市] = list; }); fs.writeFileSync(`./file/地市區(qū)縣.json`, JSON.stringify(respoolMap, null, 2));
這是一個(gè)讀取Excel數(shù)據(jù)并轉(zhuǎn)換為JSON的簡單腳本,大家可以根據(jù)自己的需求進(jìn)行微調(diào)使用
到此這篇關(guān)于node將Excel數(shù)據(jù)轉(zhuǎn)為JSON的示例代碼的文章就介紹到這了,更多相關(guān)node Excel數(shù)據(jù)轉(zhuǎn)JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解在node.js中require方法的加載規(guī)則
這篇文章主要介紹了詳解在node.js中require方法的加載規(guī)則,本文一步步解析了require加載規(guī)則,講述了核心的模塊,路徑形式的模塊,第三方模塊等,需要的朋友可以參考下2021-06-06Node.js 使用 Express-Jwt和JsonWebToken 進(jìn)行Token身份
這篇文章主要介紹了Node.js 使用 Express-Jwt和JsonWebToken 進(jìn)行Token身份驗(yàn)證的操作方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-08-08npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法
在開發(fā)過程中經(jīng)常會(huì)使用npm安裝依賴包來加速開發(fā),但是在執(zhí)行npm install命令時(shí),有時(shí)會(huì)遇到各種錯(cuò)誤,下面這篇文章主要給大家介紹了關(guān)于npm?install報(bào)錯(cuò)unable?to?resolve?dependency?tree的解決辦法,需要的朋友可以參考下2023-05-05Node.js+ES6+dropload.js實(shí)現(xiàn)移動(dòng)端下拉加載實(shí)例
這個(gè)demo服務(wù)由Node搭建服務(wù)、下拉加載使用插件dropload,數(shù)據(jù)渲染應(yīng)用了ES6中的模板字符串。有興趣的小伙伴可以自己嘗試下2017-06-06nodejs+mongodb aggregate級聯(lián)查詢操作示例
這篇文章主要介紹了nodejs+mongodb aggregate級聯(lián)查詢操作,結(jié)合實(shí)例形式分析了基于nodejs的mongodb數(shù)據(jù)庫級聯(lián)查詢相關(guān)操作技巧,需要的朋友可以參考下2018-03-03如何解決安裝websocket還是報(bào)錯(cuò)Cannot find module'ws&apos
這篇文章主要介紹了如何解決安裝websocket還是報(bào)Cannot find module'ws'問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Koa從零搭建到Api實(shí)現(xiàn)項(xiàng)目的搭建方法
這篇文章主要介紹了Koa從零搭建到Api實(shí)現(xiàn)項(xiàng)目的搭建方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07詳解node如何讓一個(gè)端口同時(shí)支持https與http
眾所周知node是一個(gè)高性能的web服務(wù)器,使用它可以很簡單的創(chuàng)建一個(gè)http或https的服務(wù)器。這篇文章主要介紹了詳解node如何讓一個(gè)端口同時(shí)支持https與http2017-07-07