Working with CSV in JavaScript (Node.js): Libraries, Parsing, and Data Generation

Online Python Trainer for Beginners

Learn Python easily without overwhelming theory. Solve practical tasks with automatic checking, get hints in Russian, and write code directly in your browser — no installation required.

Start Course

Working with CSV in JavaScript (Node.js): A Complete Guide



CSV (Comma-Separated Values) is one of the most popular formats for exchanging tabular data. In the Node.js ecosystem, there are several powerful libraries for parsing, generating, and processing CSV files. In this article, we will look at the main tools, their installation, usage examples, and best practices.



Popular Libraries for Working with CSV in Node.js



In JavaScript (Node.js), three libraries are most commonly used for working with CSV:



  • csv-parser — a fast streaming parser that works in streaming mode
  • csv-stringify — a CSV generator from JavaScript objects or arrays
  • fast-csv — a universal library combining parsing and generation


Installing Libraries



Use npm to install the required packages:



npm install csv-parser csv-stringify fast-csv


Parsing CSV with csv-parser



The csv-parser library works in streaming mode, allowing you to process files of any size without loading them entirely into memory.



Example: Reading a CSV file



const fs = require('fs');const csv = require('csv-parser');

const results = [];

fs.createReadStream('data.csv') .pipe(csv()) .on('data', (row) => { results.push(row); }) .on('end', () => { console.log('CSV file successfully processed'); console.log('First row:', results[0]); });


By default, csv-parser uses the first line of the file as headers and returns objects with corresponding keys.



Generating CSV with csv-stringify



The csv-stringify library allows you to create CSV strings from JavaScript arrays or objects.



Example: Creating CSV from objects



const { stringify } = require('csv-stringify');const fs = require('fs');

const data = [ { name: 'Ivan', age: 25, city: 'Moscow' }, { name: 'Maria', age: 30, city: 'Saint Petersburg' }, { name: 'Alexey', age: 28, city: 'Kazan' }];

const writableStream = fs.createWriteStream('output.csv');

const stringifier = stringify({ header: true, columns: ['name', 'age', 'city']});

stringifier.pipe(writableStream);data.forEach(row => stringifier.write(row));stringifier.end();


Universal Solution: fast-csv



fast-csv provides both CSV parsing and generation, and also supports various formats (TSV, custom delimiters).



Example: Parsing CSV with fast-csv



const fs = require('fs');const csv = require('@fast-csv/parse');

const rows = [];

fs.createReadStream('data.csv') .pipe(csv.parse({ headers: true })) .on('error', error => console.error(error)) .on('data', row => rows.push(row)) .on('end', (rowCount) => { console.log(`Processed ${rowCount} rows`); console.log('Data:', rows); });


Example: Writing CSV with fast-csv



const fs = require('fs');const csv = require('@fast-csv/format');

const data = [ ['Name', 'Age', 'City'], ['Ivan', '25', 'Moscow'], ['Maria', '30', 'Saint Petersburg']];

const ws = fs.createWriteStream('output.csv');csv.write(data, { headers: true }).pipe(ws);


Working with Large Files and Performance



When working with CSV files larger than 100 MB, it is recommended to use streaming processing. All three libraries discussed support streams.



Example: Processing a large CSV line by line



const fs = require('fs');const csv = require('csv-parser');

let rowCount = 0;

fs.createReadStream('large-file.csv') .pipe(csv()) .on('data', (row) => { rowC

Recommendations