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

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

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

读取文件

准备

需要安装node.js。

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

如何在Node.js中读取CSV文件_第1张图片

我将使用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()。

如何在Node.js中读取CSV文件_第2张图片

 

处理数据

为了可以更轻松地使用数据结构中的数据,我会创建一个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()

谢谢阅读,编码快乐!

更多好文章,欢迎访问:http://zhaima.tech

你可能感兴趣的:(Node.js)