【发布时间】:2016-01-27 14:10:10
【问题描述】:
首先,我是 NodeJS 和 JavaScript 的新手,因此我们将不胜感激。
我的目标是能够解析一个 csv 文件,这样我就可以看到每个月有多少用户登录。为了让我这样做,我使用 npm "CSVtoJSON" 将 csv 文件转换为 JSON 格式。这是我从 JSON 文件中得到的,但有超过 8000 多个条目。下面是一个sn-p。
[
{ date: '2015-04-09T19:30:22.213795+00:00',
'email address': '',
'full name': 'Canton Bashkin',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Canton Bashkin logged in' },
{ date: '2015-04-08T00:34:42.261728+00:00',
'email address': '',
'full name': 'Sha Phad',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Sha Phad logged in' },
{ date: '2015-04-07T23:31:32.559654+00:00',
'email address': '',
'full name': 'Canton Bashkin',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Canton Bashkin logged in' },
{ date: '2015-04-07T23:31:02.408628+00:00',
'email address': '',
'full name': 'Sha Phad',
action: 'LoggedInActivity',
application: '',
project: '',
task: '',
'other email address': '',
'other full name': '',
description: 'Sneha Phadke logged in'}
]
我的代码:
//Converter Class
var Converter = require("csvtojson").Converter;
var converter = new Converter({});
var allUsers = [];
//end_parsed will be emitted once parsing finished
function parseUsers() {
converter.on("end_parsed", function (jsonArray) {
for (var i = 0; i < jsonArray.length; i++) {
var users = jsonArray[i]['full name'];
if (jsonArray[i]['action'] === 'LoggedInActivity') {
if (users != 'SD Elements Support' && users != 'Karan Sharala' && users != 'Rick Bogans'
&& users != 'Kanal Bhatya' && users != 'Sanka Saja' && users != 'Kiiko Plash') {
allUsers.push(jsonArray[i]);
}
}
}
console.log(allUsers);
});
}
parseUsers();
//read from file
require("fs").createReadStream("log.csv").pipe(converter);
我一直在试图找出解析 JSON 的最佳方法,这样我就不会将同名的重复项添加到数组中。如果我这样做完全错误,请指出我正确的方向。谢谢大家的帮助。
获得名称后,我需要将它们分成单独的月份,我不太确定如何做到这一点。任何帮助将不胜感激!
【问题讨论】:
-
所以它们应该是唯一的
full name? -
如果 full name 是 String 您可以使用名称作为 Object 键 并测试对象是否存在关键的(比遍历一个数组测试每个项目要快得多)
-
是的,没错
-
请注意,@zero298 链接到的示例仅适用于原语,对于您需要比简单的
indexOf更多努力的对象
标签: javascript json node.js csv