Javascript 上传和读取CSV解析文件

Javascript 上传和读取CSV解析文件,javascript,node.js,sails.js,Javascript,Node.js,Sails.js,我正在尝试使用节点csv解析器 'from' ' 'to' 'from' ' 'to' 'from' ' 'to' 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR' 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR' 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR' 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR' 下面是我的代码: req.file(

我正在尝试使用
节点csv解析器

 'from' ' 'to' 'from' ' 'to' 'from' ' 'to'
 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR'
 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR'
 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR'
 'Germ' ' 'NL' 'Turk' ' 'US' 'Nile' ' 'BR'
下面是我的代码:

req.file('ratefile').upload(function (err, uploadedFile) {
        if (err) return ResponseService.json(500, err, 'Uploaded Failed');

        console.log(uploadedFile.length) //

        if (uploadedFile.length) {
            rs = fs.createReadStream(uploadedFile[0].fd);
            parser = parse({columns: true, trim: true}, function (err, data){
                var record = {};
                console.log(data);
                _.forEach(data, function(datum, index){
                    var routeName = datum['from'] +"-"+ datum['to'];
                    console.log(routeName);
                    record.name = datum['from'] +"-"+ datum['to'];
                    record.to = datum['to'];
                    record.from = datum['from'];
                });

                return ResponseService.json(200, res, 'file successfully uploaded');
            });
            rs.pipe(parser);
        } else {
            return ResponseService.json(500, res, 'Please upload a file')
        }
    });
当我运行它时,它只是csv文件的最后一列

  'from' ' 'to'
  'Nile' ' 'BR'
  'Nile' ' 'BR'
  'Nile' ' 'BR'

任何帮助都将不胜感激。谢谢

它将解析为

{
  "from": "Germ",
  "to"  : "NL",
  "from": "Turk",
  "to"  : "US",
  ...
}
当然,它不是有效的JSON,看看重复的键。所以最后一个键值对实际上将覆盖前一个键值对

你行吗

parser = parse({columns: true, trim: true}, function (err, data){
使用函数或
null
作为
值,如

parse({columns: null, trim: true}

并打印出解析结果,然后根据自己的需要进行修改。它也可以使用
函数
,但我不确定
函数
能否解决您的问题,因为它仍然会将您的单个csv行解析为单个
对象

,我打赌这是因为您的列具有重复的名称…您提供的数据实际上看起来不像csv。。。什么是列分隔符?不是,我使用逗号分隔的CSV,是的,因为列是重复的。如果我想那样访问它呢?我不能吗?我正在读的数据非常大,我无法开始编辑不,你不能。每一列都必须有一个唯一的名称为什么不自己解析呢?创建可写流并用逗号分隔行,这样您将得到一个可以访问的数组。我知道,通过该模块,您可以禁用对象创建(
headers:false
),并将其改为输出数组。但是,您必须忽略第一行,因为它会认为这是一个正常的数据行。我也进行了测试,我看到响应是以带有对象的数组的形式出现的,我避免不使用列:true…但也必须使用这种方法。谢谢anyway@ItuokeAjanlekoko你的问题是否已经解决?通过选择答案将此主题标记为已解决,以避免误导未解决的主题:)