如何使用JavaScript将指定JSON结构转换为目标CSV格式?
解决JSON转指定格式CSV的JavaScript实现
首先注意你给出的目标CSV表头存在笔误,正确表头应该是 "Date", "header1", "header2", "header3"(对应下方的数值列),以下实现基于此正确结构完成。
实现思路
- 提取所有唯一日期并排序,确保行顺序统一
- 构建符合要求的CSV表头
- 按日期遍历,匹配每个表头对应的数值
- 拼接成标准CSV格式字符串
完整代码实现
// 输入的JSON数据 const jsonData = { "header1": [ {"date": "2022-11-05", "value": 1}, {"date": "2022-11-06", "value": 2} ], "header2": [ {"date": "2022-11-05", "value": 10}, {"date": "2022-11-06", "value": 20} ], "header3": [ {"date": "2022-11-05", "value": 100}, {"date": "2022-11-06", "value": 300} ] }; // 1. 收集所有唯一日期并排序 const allDates = [...new Set( Object.values(jsonData) .flatMap(arr => arr.map(item => item.date)) )].sort(); // 2. 构建CSV表头 const headers = ["Date", ...Object.keys(jsonData)]; const csvHeader = headers.map(h => `"${h}"`).join(", "); // 3. 构建每一行的数据 const csvRows = allDates.map(date => { // 先处理日期列 const row = [`"${date}"`]; // 遍历每个表头,找到对应日期的value headers.slice(1).forEach(header => { const item = jsonData[header].find(item => item.date === date); // 如果找不到对应日期,用空值填充 row.push(item ? item.value : ""); }); return row.join(", "); }); // 4. 拼接成完整CSV const csv = [csvHeader, ...csvRows].join("\n"); console.log(csv);
输出结果
运行后会得到符合要求的CSV:
"Date", "header1", "header2", "header3" "2022-11-05", 1, 10, 100 "2022-11-06", 2, 20, 300
额外说明
- 代码处理了日期不一致的情况:如果某个表头下没有对应日期的数据,会用空值填充
- 日期会自动排序,保证输出顺序统一
- 字符串类型的字段(日期、表头)都添加了双引号,符合CSV标准格式
内容的提问来源于stack exchange,提问作者Justin O
相关产品推荐
相关产品推荐

