# How to convert CSV to JSON in Node.js

By Atta Ur Rehman Shah (https://attacomsian.com/about). Published Apr 8, 2020, updated Oct 1, 2022. Topics: Node.js.
Canonical URL: https://attacomsian.com/blog/nodejs-convert-csv-to-json

> A quick guide to learning how to convert a CSV (Comma-Separated Values) file into a JSON array using Node.js.

[CSV](https://attacomsian.com/topics/csv) (Comma-Separated Values) is a popular data exchange format that stores data in a tabular format where each row consists of one or more fields and each column represents a specific field. Due to simplicity and better integration with existing applications, CSV is widely used for exporting and importing large data sets.

In this article, you'll learn how to **parse and convert a CSV file into a JSON array** in a Node.js application. We'll write a Node.js script that takes a CSV file as input and outputs its contents as a JSON array.

In order to do the CSV to JSON conversion, we'll be using the [csvtojson](https://www.npmjs.com/package/csvtojson) package from NPM. This package is a Node.js  CSV parser to convert CSV to JSON or column arrays.

## Create an Application

Let us first create a new Node.js application and install all the required dependencies. Navigate to the folder where you want to store your project and execute the following command in the terminal:

```bash
$ npm init -y
```

This will initialize a new Node.js project and create a `package.json` file in the root directory. Next, install the `csvtojson` module by typing the following command:

```bash
$ npm install csvtojson --save
```

The above command will create a `node_modules` directory inside your project containing all the dependencies that `csvtojson` requires.

Finally, create a sample CSV file called `users.csv` with the following content in the root directory:

<p class="file-desc"><span>users.csv</span></p>

```csv
id,name,email,country,age
100,Atta Shah,atta@example.com,PK,30
101,Alex Jones,alex@example.com,DE,35
102,Jovan Lee,jovan@example.com,FR,25
103,Greg Hover,greg@example.com,US,45
```

## Convert CSV to JSON

To convert the above CSV file to JSON, create a new JavaScript file named `app.js` in the root directory:

```bash
$ touch app.js
```

If the `touch` command is unavailable, simply create the file manually. Open the `app.js` file in your favorite editor and add the following code:

<p class="file-desc"><span>app.js</span></p>

```javascript
// require csvtojson module
const CSVToJSON = require('csvtojson')

// convert users.csv file to JSON array
CSVToJSON()
  .fromFile('users.csv')
  .then(users => {
    // users is a JSON array
    // log the JSON array
    console.log(users)
  })
  .catch(err => {
    // log error if any
    console.log(err)
  })
```

The above code is a complete example that loads a CSV file asynchronously and converts it into a JSON array. The `fromFile()` method takes in the path to the CSV file and returns a new [promise](https://attacomsian.com/blog/promises-javascript). Once the promise is resolved successfully, the `then()` method is called with the JSON array as an argument. If `csvtojson` fails to convert the CSV file to JSON, it will throw an error that will be caught by the `catch()` method.

To see the output, type the following command in your terminal:

```bash
$ node app.js
```

Here is what the output looks like:

```bash
[ { id: '100',
    name: 'Atta Shah',
    email: 'atta@example.com',
    country: 'PK',
    age: '30' },
  { id: '101',
    name: 'Alex Jones',
    email: 'alex@example.com',
    country: 'DE',
    age: '35' },
  { id: '102',
    name: 'Jovan Lee',
    email: 'jovan@example.com',
    country: 'FR',
    age: '25' },
  { id: '103',
    name: 'Greg Hover',
    email: 'greg@example.com',
    country: 'US',
    age: '45' } ]
```

### Write JSON to File

Sometimes you may want to store the newly created JSON array in a file for further processing. Here is an example that demonstrates how to write the JSON array to a file:

```javascript
// Write JSON array to a file
fs.writeFile('users.json', JSON.stringify(users, null, 4), err => {
  if (err) {
    throw err
  }
  console.log('JSON array is saved.')
})
```

Read [this guide](https://attacomsian.com/blog/nodejs-write-json-object-to-file) to learn more about writing JSON to a file in a Node.js application.

### Async-Await

The `csvtojson` module also supports the [async-await](https://attacomsian.com/blog/async-await-javascript) syntax. Let us create a new file called `app-async.js` with the following content:

<p class="file-desc"><span>app-async.js</span></p>

```javascript
// require csvtojson module
const CSVToJSON = require('csvtojson')

// convert users.csv file to JSON array
;(async () => {
  try {
    const users = await CSVToJSON().fromFile('users.csv')

    // log the JSON array
    console.log(users)
  } catch (err) {
    console.log(err)
  }
})()
```

> **Source Code:** Download the complete source code from [GitHub](https://github.com/attacomsian/code-examples/tree/master/nodejs/csv-to-json) available under MIT license.

## Conclusion

That's all for converting a Comma-Separated Values (CSV) file into a JSON array in a Node.js application using the `csvtojson` package. We also discussed writing the JSON array to a file for further processing.

The `csvtojson` package is a lightweight yet powerful library to convert CSV to JSON in Node.js and browsers. You can even use it as a command-line tool to quickly convert a CSV file to a JSON file.

**Read Next:** [How to convert JSON to CSV in Node.js](https://attacomsian.com/blog/nodejs-convert-json-to-csv)
