在Node.js中如何将指定格式CSV文件转换为目标结构的JSON文件
Node.js 实现特定格式CSV转JSON方案
你给出的CSV属于非标准结构化格式,字段值跨多行、不同对象用///分隔,无法直接用通用CSV解析库处理,以下是可直接运行的完整实现代码:
const fs = require('fs'); // 读取CSV文件 fs.readFile('./input.csv', 'utf8', (err, data) => { if (err) { console.error('读取文件失败:', err); return; } // 按///分割为多个对象块,过滤空块 const objectBlocks = data.split('///').filter(block => block.trim().length > 0); const result = []; objectBlocks.forEach(block => { const lines = block.trim().split('\n').map(line => line.trim()); const currentObj = { Name: {}, Role: [], Address: [] }; let currentField = ''; lines.forEach(line => { if (!line) return; const [firstPart, ...restParts] = line.split(',').map(part => part.trim()); // 判断行首是否为字段名 if (['Name', 'Role', 'Address'].includes(firstPart)) { currentField = firstPart; const valuePart = restParts.join(',').trim(); processFieldValue(currentField, valuePart, currentObj); } else { // 是上一个字段的续值,整行都是值内容 const valuePart = line.trim(); processFieldValue(currentField, valuePart, currentObj); } }); result.push(currentObj); }); // 输出到JSON文件 fs.writeFile('./output.json', JSON.stringify(result, null, 2), err => { if (err) { console.error('写入JSON文件失败:', err); return; } console.log('转换完成,结果已保存到output.json'); }); }); // 字段值处理函数 function processFieldValue(field, value, obj) { if (!value) return; switch(field) { case 'Name': const [firstName, lastName] = value.split(' '); obj.Name.first_name = firstName; obj.Name.last_name = lastName; break; case 'Role': // 去掉末尾分号,过滤空内容 const roles = value.replace(/;$/, '').trim(); if (roles) obj.Role.push(roles); break; case 'Address': // 按逗号分割所有地址段,去空格过滤空值 const addressParts = value.split(',').map(p => p.trim()).filter(p => p); obj.Address.push(...addressParts); break; } }
使用说明
- 将你的CSV内容保存为
input.csv,和上述代码放在同一目录 - 运行
node 你的脚本文件名.js即可生成符合要求的output.json - 代码默认兼容空格、多余分号、空行等格式异常,你给出的示例输入可直接输出你要求的JSON结构
内容的提问来源于stack exchange,提问作者Suneetha
相关产品推荐
相关产品推荐

