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你的问题是否已经解决?通过选择答案将此主题标记为已解决,以避免误导未解决的主题:)