[英]Node.js filter/extract subset of data from csv / JSON
我試圖從csv文件中提取信息,該文件有很多行,我想只返回特定行的一些值/列。 我使用papa / babyparse將csv文件轉換為JSON,但很難顯示/提取特定行。
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!");
}
});
我得到的輸出似乎是不錯的JSON。
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”,但得到一個“未定義”的回復。 也嘗試使用.filter
和.hasOwnProperty
但不知何故我似乎錯過了一些東西(在JSON.stringify
之前嘗試過JSON.stringify
但沒有成功)。 經過幾個小時的追蹤,錯誤和谷歌搜索,我想我在這里問。
Idealy我能夠使用變量來過濾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
});
這對我來說很好
Edit.2:
你也可以使用promises:
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); });
我希望它有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.