编程语言
首页 > 编程语言> > javascript-上传和读取CSV分析文件

javascript-上传和读取CSV分析文件

作者:互联网

我正在尝试使用Node CSV-Parser读取具有多个相同列的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行解析为单个对象.

标签:node-js,sails-js,javascript
来源: https://codeday.me/bug/20191120/2040753.html