如何在Node.js中读取CSV文件

发布于3/8/2020 来自:「前端知否」微信公众号

在本文中,我们将学习如何从CSV文件中读取数据。对于CSV文件,结构化逗号分隔值文件,数据将作为json对象数组进行接收。

这将使我们能够探索JavaScript类和Object.assign()的使用。创建一个员工对象数组,比JSON对象本身更容易操作。

读取文件

准备

需要安装node.js。

然后创建csv文件,并将其命名为Data.csv。

xxx

我将使用Visual Studio Code(VSCode)。

1. 通过打开"终端"窗口并键入以下内容,将index.js作为默认文件创建package.json,

npm init -y

2. 要安装npm软件包,请在“终端”窗口中键入,

npm i csvtojson

3. 创建一个名为index.js的文件,然后在编辑器中将其打开。

读取CSV文件并获取Json对象数组

将以下代码添加到index.js文件。

调用csv()返回一个promise。

const csv = require('csvtojson')

const converter = csv()
.fromFile('./Data.csv')
.then((json) => {
console.log(json);
})

使用CTRL + F5即可运行。如果想看到结构良好的json对象数组。您也可以使用console.table()

xxx

处理数据

为了可以更轻松地使用数据结构中的数据,我会创建一个JavaScript类。由于数据是json对象的数组,我会创建一个名为Employee的类。使用Object.assign()将每个json对象分配给一个Employee对象,并将它们存储在一个名为emp[]的Employee对象数组中。

这样,我们可以使用Employee类的getter方法来获取我们希望使用的任何数据。

创建员工类

在index.js的顶部,添加以下类和数组变量。

class Employee {

constructor() {}

set Name(Name) {
this._Name = Name;
}

set Title(Title) {
this._Title = Title;
}

set Salary(Salary) {
this._Salary = Salary;
}

get Name() {
return this._Name;
}

get Title() {
return this._Title;
}

get Salary() {
return this._Salary;
}
}

let emp = []; // Employee Objects 数组

我们将创建新的Employee对象,并在promise的第一个.then()处理函数中将它们添加到Array中。

我们将其与另一个.then()连接起来,以通过调用Name getter方法在"Employee数组"中显示每个Employee的姓名。

我们现在可以访问所需的任何数据。

如下修改index.js中的csv()调用,然后使用CTRL + F5运行。

// 调用csv()返回一个promise
const converter = csv()
.fromFile('./Data.csv')
.then((json) => {
let e; // Employee Object
json.forEach((row) => {
e = new Employee();
Object.assign(e, row); // 给Employee对象赋值
emp.push(e); // 添加Employee对象到数组
});
}).then(() => {
// 输出所有Employees的名字
emp.forEach((em) => {
console.log(em.Name); // 调用Name getter方法
});
});

Bob
Carol
Ted
Alice

完整的代码如下:

class Employee {

constructor() {}

set Name(Name) {
this._Name = Name;
}

set Title(Title) {
this._Title = Title;
}

set Salary(Salary) {
this._Salary = Salary;
}

get Name() {
return this._Name;
}

get Title() {
return this._Title;
}

get Salary() {
return this._Salary;
}
}

let emp = [];

const csv = require('csvtojson')

const converter = csv()
.fromFile('./Data.csv')
.then((json) => {
let e;

json.forEach((row) => {
e = new Employee();
Object.assign(e, row);
emp.push(e);
});
}).then(() => {
emp.forEach((em) => {
console.log(em.Name);
});
});

最后

实际上,有很多npm软件包用于处理文件。我选择这个是为了获取json数据,而且我们也能因此使用ClassesObject.assign()

谢谢阅读,编码快乐!