如何在JavaScript中将多CSV转JSON并修改键名、排序及嵌套处理
多CSV转嵌套结构JSON并按orderID排序的实现方案
准备工作
先安装依赖库csvtojson:
npm install csvtojson
实现代码
以下是完整的Node.js脚本,包含文件读取、数据转换、嵌套结构构建和排序逻辑:
const csv = require('csvtojson'); const fs = require('fs').promises; async function transformCSVs() { // 替换为你的CSV文件路径 const csvFile1 = './orders.csv'; const csvFile2 = './customer.csv'; // 将两个CSV文件转为JSON数组 const orderData = await csv().fromFile(csvFile1); const customerData = await csv().fromFile(csvFile2); // 构建目标JSON结构 const finalResult = orderData.map((orderRow, index) => { // 假设两行数据按索引一一对应;若需按orderID关联,改用find方法匹配 const customerRow = customerData[index]; return { storeOrders: { orderType: customerRow.ORDERTYPE, orderID: orderRow.ORDERIDENTIFIER, orderDetails: { productType: orderRow.PRODUCTTYPE }, collectedOrders: [ { orderDate: orderRow.ORDERDTE, customerAge: customerRow.CUSTOMERAGE } ], storeDetails: { storeState: orderRow.STORESTE } } }; }); // 按orderID排序(转为数字避免字符串排序异常) finalResult.sort((a, b) => { const idA = parseInt(a.storeOrders.orderID, 10); const idB = parseInt(b.storeOrders.orderID, 10); return idA - idB; // 升序排列,降序则改为 idB - idA }); // 写入最终JSON文件 await fs.writeFile('./output.json', JSON.stringify(finalResult, null, 2)); console.log('转换完成,输出文件:output.json'); } // 执行转换 transformCSVs().catch(err => console.error('转换失败:', err));
关键逻辑说明
- 多文件处理:通过
csv().fromFile()分别读取两个CSV,转为可操作的JSON数组后再合并处理 - 自定义键名与嵌套结构:直接映射原CSV列名到目标键名,按需求逐层构建对象和数组(比如
collectedOrders设计为数组格式) - 忽略无用列:仅提取需要的字段(如CSV1的
ORDERIDENTIFIER、ORDERDTE等),未用到的列自动忽略 - 数据关联(可选):如果两个CSV不是按行索引对应,而是通过
orderID关联,将customerData[index]替换为:const customerRow = customerData.find(row => row.关联字段 === orderRow.ORDERIDENTIFIER); - 排序处理:将
orderID转为数字类型后再排序,避免字符串排序时出现"444"大于"22222"的异常情况
内容的提问来源于stack exchange,提问作者breakitdownbuilditup
相关产品推荐
相关产品推荐

