Javascript Node.js从csv/JSON中过滤/提取数据子集
我试图从csv文件中提取信息,该文件有许多行,我只想从特定行返回一些值/列。我使用papa/将csv文件转换为JSON,但很难显示/提取特定行Javascript Node.js从csv/JSON中过滤/提取数据子集,javascript,json,node.js,papaparse,Javascript,Json,Node.js,Papaparse,我试图从csv文件中提取信息,该文件有许多行,我只想从特定行返回一些值/列。我使用papa/将csv文件转换为JSON,但很难显示/提取特定行 var baby = require('babyparse'); var csv2 = baby.parseFiles("netreqs.csv",{ header:true, skipEmptyLines: true, step: function(row) { console.
var baby = require('babyparse');
var csv2 = baby.parseFiles("netreqs.csv",{
header:true,
skipEmptyLines: true,
step: function(row) {
console.log("Row:", row.data);
},
complete: function() {
console.log("All done!");
}
});
我得到的输出似乎很好
Row: [ { Req: 'RQ0342384',
'Requestor country': 'UK',
ReqType: 'other',
'ATOS Approved': '21.09.2016',
Urgent: 'No',
Assignee: 'Hans Gans',
'Change number': 'NA',
'Implementation Date': '',
'Change fully approved': 'No',
'Completion Date': '',
'Req Closed': 'No' } ]
Row: [ { Req: 'RQ0343423',
'Requestor country': 'US',
ReqType: 'Firewall',
'ATOS Approved': '04.11.2016',
Urgent: 'No',
Assignee: 'Peter Mueller',
'Change number': 'C9343449',
'Implementation Date': '',
'Change fully approved': 'No',
'Completion Date': '31.01.2017',
'Req Closed': 'No' } ]
...
我试图使用row.data.req
作为我的“if”,但得到了一个“undefined”返回。还尝试了.filter
和.hasOwnProperty
但不知何故,我似乎错过了一些东西(在if之前也尝试了JSON.stringify
,但没有成功)。经过几个小时的跟踪和搜索,我想我在这里问了
理想情况下,我能够使用一个变量按Req过滤“行”(这是我从另一个函数获得的输入),然后从该“行”查询其他键/值对,因为我希望根据数据实现不同的响应
我得承认我对这件事还不太熟悉,谢谢你的支持。非常感谢我相信您不需要为此使用解析器。只需使用readLine即可:
var output = [];
var count = 0
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.csv')
});
lineReader.on('line', function (line) {
var jsonFromLine = {};
if (count == 2) { // this is my conditional. Set line 2
var lineSplit = line.split(',');
// select columns you want
jsonFromLine.column0 = lineSplit[0];
jsonFromLine.column1 = lineSplit[1];
// ...
output.push(jsonFromLine);
}
count++;
});
lineReader.on('close', function (line) {
console.log(output); // list output
});
我希望有帮助
编辑。
如果需要特定值,可以设置不同的条件:
var output = [];
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.csv')
});
lineReader.on('line', function (line) {
var jsonFromLine = {};
var lineSplit = line.split(',');
// select columns you want
jsonFromLine.req = lineSplit[0];
jsonFromLine.column1 = lineSplit[1];
// ...
if (jsonFromLine.req === 'RQ0191223') {
output.push(jsonFromLine);
}
});
lineReader.on('close', function (line) {
console.log(output); // list output
});
这对我来说很好
编辑。2:
你也可以使用承诺:
var method = function () {
return new Promise(function(resolve) {
var output = [];
var lineReader = require('readline').createInterface({
input: require('fs').createReadStream('file.csv')
});
lineReader.on('line', function (line) {
var jsonFromLine = {};
var lineSplit = line.split(',');
// select columns you want
jsonFromLine.req = lineSplit[0];
jsonFromLine.column1 = lineSplit[1];
// ...
if (jsonFromLine.req === 'RQ0191223') {
output.push(jsonFromLine);
}
});
lineReader.on('close', function (line) {
resolve(output);
});
});
}
method().then(function(outputOfResolve) { console.log(outputOfResolve); });
我希望这会有所帮助您只需要一行的值吗?@cbronson是的,非常感谢您的快速回复,但我收到一条错误消息:TypeError:reader.on不是函数。我现在更改了变量。您可以在代码中添加条件。我把一个条件放在与行数有关的地方,但你可以换成另一种条件。很抱歉,如果这对您来说有点愚蠢,那么我如何测试文件中的特定值呢?“如果(jsonFromLine.req=='RQ0191223')”似乎不起作用,我现在如何将其打包到一个可以从另一个脚本调用的函数中?