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

Node.js中使用csv-parser转换CSV为JSON异常问题排查

解决csv-parser转换CSV到JSON返回字符串而非对象的问题

问题场景

有一个包含表头的CSV文件,内容示例如下:

CountryName,CapitalName,CapitalLatitude,CapitalLongitude,CountryCode,ContinentName
Somaliland,Hargeisa,9.55,44.050000,NULL,Africa
South Georgia and South Sandwich Islands,King Edward Point,-54.283333,-36.500000,GS,Antarctica
French Southern and Antarctic Lands,Port-aux-Français,-49.35,70.216667,TF,Antarctica
Palestine,Jerusalem,31.766666666666666,35.233333,PS,Asia
Aland Islands,Mariehamn,60.116667,19.900000,AX,Europe

使用Node.js的csv-parser模块转换时,未得到预期的JSON对象数组,反而返回原始字符串内容。原代码如下:

const fs = require('fs');
const csv = require('csv-parser');

const dataResults = [];
const fileHeaders = [
    'CountryName',
    'CapitalName',
    'CapitalLatitude',
    'CapitalLongitude',
    'CountryCode',
    'ContinentName'
]

// reads the file 
var readFile = fs.createReadStream(__dirname + '/country-capitals.csv','utf-8');

readFile.pipe(csv({separator: '\n', headers:fileHeaders}))
// event handler that handels the data
readFile.on('data', (data)=>dataResults.push(data))

readFile.on('end',()=>{
    console.log(dataResults);
})

错误原因

  1. 分隔符设置错误:将separator设为\n(换行符),但csv-parser中separator是列的分隔符,CSV文件默认用逗号,分隔列,换行是行分隔符无需手动指定。
  2. 事件监听对象错误:监听了原始文件流readFile的data事件,该事件返回的是文件的原始字符串块;应该监听pipe之后的csv-parser流的data事件,才能获取解析后的对象。

修正后的代码

const fs = require('fs');
const csv = require('csv-parser');

const dataResults = [];
// CSV文件已有表头,无需手动指定headers,若需自定义键名可保留
// const fileHeaders = [
//     'CountryName',
//     'CapitalName',
//     'CapitalLatitude',
//     'CapitalLongitude',
//     'CountryCode',
//     'ContinentName'
// ]

const readFile = fs.createReadStream(__dirname + '/country-capitals.csv', 'utf-8');

// 移除错误的separator设置,csv-parser默认用逗号分隔列
const parseStream = readFile.pipe(csv());

// 监听csv-parser流的data事件,获取解析后的对象
parseStream.on('data', (data) => dataResults.push(data));

parseStream.on('end', () => {
    console.log(dataResults);
    // 若需要转为格式化的JSON字符串,可使用:
    // console.log(JSON.stringify(dataResults, null, 2));
});

补充说明

  • 如果CSV文件的表头和你期望的键名完全一致,无需手动设置headers参数,csv-parser会自动将第一行作为对象的键名;如果需要自定义键名,再保留headers配置即可。
  • 修正后dataResults会存储由解析后的对象组成的数组,完全符合预期的JSON格式结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:47:37