You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:42:36