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

如何在Node-express中实现JSON按各key拆分表头转换为CSV

实现方案

完全可以实现,以下是Node + Express 环境下的完整实现代码,转换后的CSV格式和你给出的示例完全匹配:

1. 核心转换函数

首先编写JSON转目标CSV格式的工具方法,会自动处理字段含特殊字符的转义问题:

// 转义CSV特殊字符(逗号、引号、换行)
const escapeCsvField = (field) => {
  const str = String(field);
  if (str.includes(',') || str.includes('"') || str.includes('\n')) {
    return `"${str.replace(/"/g, '""')}"`;
  }
  return str;
};

// 输入JSON转目标格式CSV
const jsonToTargetCsv = (inputData) => {
  const csvBlocks = [];
  // 遍历每个顶级key对应的数组
  for (const dataList of Object.values(inputData)) {
    if (!dataList.length) continue;
    // 生成当前块的表头
    const headers = Object.keys(dataList[0]).map(escapeCsvField).join(',');
    // 生成当前块的所有数据行
    const rows = dataList.map(item => 
      Object.values(item).map(escapeCsvField).join(',')
    );
    // 拼接当前块,加入块列表
    csvBlocks.push([headers, ...rows].join('\n'));
  }
  // 不同块之间用空行分隔
  return csvBlocks.join('\n\n');
};

2. Express接口实现

可以直接做一个接口,访问时自动下载生成的CSV文件:

const express = require('express');
const app = express();
const port = 3000;

// 你的原始数据,也可以改成接口接收动态传入的JSON
const inputData = {
  keyOne: [{
    keyOneColOne: 1345,
    keyOneColTwo: 546,
    keyOneColThree: 769
  }],
  keyTwo: [
    {
      keyTwoColOne: 1,
      keyTwoColTwo: 2,
      keyTwoColThree: 2,
      keyTwoColFour: 1
    },
    {
      keyTwoColOne: 1,
      keyTwoColTwo: 2,
      keyTwoColThree: 2,
      keyTwoColFour: 1
    }
  ],
  keyThree: [
    {
      keyThreeColOne: 22,
      keyThreeColTwo: 23,
      keyThreeColThree: 24,
      keyThreeColFour: 25
    },
    {
      keyThreeColOne: 22,
      keyThreeColTwo: 23,
      keyThreeColThree: 24,
      keyThreeColFour: 25
    }
  ]
};

// CSV下载接口
app.get('/download-csv', (req, res) => {
  const csvContent = jsonToTargetCsv(inputData);
  // 设置响应头,指定为CSV文件下载
  res.setHeader('Content-Type', 'text/csv; charset=utf-8');
  res.setHeader('Content-Disposition', 'attachment; filename=output.csv');
  // 处理UTF-8 BOM,避免中文乱码
  res.write('\ufeff');
  res.send(csvContent);
});

app.listen(port, () => {
  console.log(`服务启动成功,访问 http://localhost:${port}/download-csv 即可下载CSV文件`);
});

3. 输出CSV效果

生成的CSV内容如下,和你提供的示例格式完全一致:

keyOneColOne,keyOneColTwo,keyOneColThree
1345,546,769

keyTwoColOne,keyTwoColTwo,keyTwoColThree,keyTwoColFour
1,2,2,1
1,2,2,1

keyThreeColOne,keyThreeColTwo,keyThreeColThree,keyThreeColFour
22,23,24,25
22,23,24,25

如果需要生成CSV文件保存到本地,只需要用fs模块的writeFile方法把csvContent写入.csv后缀的文件即可。

内容的提问来源于stack exchange,提问作者fractal397

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:36:04