Javascript Node.js从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.

我试图从csv文件中提取信息,该文件有许多行,我只想从特定行返回一些值/列。我使用papa/将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!");
        }
});
我得到的输出似乎很好

   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')”似乎不起作用,我现在如何将其打包到一个可以从另一个脚本调用的函数中?