在本文中,我们将学习如何从CSV文件中读取数据。对于CSV文件,结构化逗号分隔值文件,数据将作为json对象数组进行接收。
这将使我们能够探索JavaScript类和Object.assign()的使用。创建一个员工对象数组,比JSON对象本身更容易操作。
读取文件
准备
需要安装node.js。
然后创建csv文件,并将其命名为Data.csv。
我将使用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()。
处理数据
为了可以更轻松地使用数据结构中的数据,我会创建一个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数据,而且我们也能因此使用Classes和Object.assign()。
谢谢阅读,编码快乐!
更多好文章,欢迎访问:http://zhaima.tech