What is csv-stringify?
The csv-stringify npm package is a module that provides the ability to convert arrays or objects into a CSV (Comma-Separated Values) string. It can be used to generate CSV files or strings from JavaScript data structures, supporting both the Node.js stream API and a simple callback-based API.
What are csv-stringify's main functionalities?
Stringifying an array of records
This feature allows you to convert an array of arrays (representing records) into a CSV string. Each sub-array is a row in the CSV output.
const stringify = require('csv-stringify');
const records = [['1', '2', '3'], ['a', 'b', 'c']];
stringify(records, (err, output) => {
if (err) throw err;
console.log(output);
});
Stringifying from a stream
This feature demonstrates how to use csv-stringify with Node.js streams. Data can be piped into the stringify function, which then outputs a CSV formatted stream.
const stringify = require('csv-stringify');
const { Readable } = require('stream');
const records = new Readable({
objectMode: true,
read() {}
});
records.push(['1', '2', '3']);
records.push(['a', 'b', 'c']);
records.push(null);
records.pipe(stringify()).pipe(process.stdout);
Stringifying objects with column headers
This feature allows you to convert an array of objects into a CSV string, including column headers as the first row in the output.
const stringify = require('csv-stringify');
const records = [{ id: '1', name: 'John Doe' }, { id: '2', name: 'Jane Doe' }];
stringify(records, { header: true }, (err, output) => {
if (err) throw err;
console.log(output);
});
Other packages similar to csv-stringify
papaparse
PapaParse is a robust and powerful CSV (character-separated values) parser with a focus on ease of use and performance. It can parse CSV files or strings, convert them to JSON, and provide many advanced features like auto-detection of delimiters. Compared to csv-stringify, PapaParse offers both parsing and stringifying capabilities, whereas csv-stringify is focused only on stringifying.
fast-csv
fast-csv is an npm package that provides parsing and formatting capabilities for CSV data. It is designed to be fast and flexible, allowing for both stream and callback-based APIs. While csv-stringify is specifically for stringifying JavaScript data into CSV format, fast-csv offers both parsing and formatting, making it a more comprehensive solution for working with CSV data.
This project is part of the CSV module
and a stringifier converting records into a CSV text and implementing the
Node.js stream.Transform
API. It is also providing a simple callback-base API
for converniency. It is both extremely easy to use and powerfull. It was
released since 2010 and is tested against very large dataset by a large
community.
Documentation for the "csv-stringify" package is available here.
Note
This module is to be considered in alpha stage. It is part of an ongoing effort
to split the current CSV module into complementary modules with a cleaner design
and the latest stream implementation. However, the code has been imported with
very little changes and you should feel confident to use it in your code.
Usage
Run npm install csv
to install the full csv module or run
npm install csv-stringify
if you are only interested by the CSV stringifier.
Use the callback style API for simplicity or the stream based API for
scalability.
Using the callback API
The stringifier receive an array and return a string inside a user-provided
callback. This example is available with the command node samples/callback.js
.
var stringify = require('csv-stringify');
input = [ [ '1', '2', '3', '4' ], [ 'a', 'b', 'c', 'd' ] ];
stringify(input, function(err, output){
output.should.eql('1,2,3,4\na,b,c,d');
});
Using the stream API
var stringify = require('csv-stringify');
data = '';
stringifier = stringify({delimiter: ':'})
stringifier.on('readable', function(){
while(row = stringifier.read()){
data += row;
}
});
stringifier.on('error', function(err){
consol.log(err.message);
});
stringifier.on('finish', function(){
data.should.eql(
"root:x:0:0:root:/root:/bin/bash\n" +
"someone:x:1022:1022:a funny cat:/home/someone:/bin/bash"
);
});
stringifier.write([ 'root','x','0','0','root','/root','/bin/bash' ]);
stringifier.write([ 'someone','x','1022','1022','a funny cat','/home/someone','/bin/bash' ]);
stringifier.end();
Using the pipe function
One usefull function part of the Stream API is pipe
to interact between
multiple streams. You may use this function to pipe a stream.Readable
array
or object source to a stream.Writable
string destination. The next example
available as node samples/pipe.js
generate records, stringify them and print
them to stdout.
stringify = require('csv-stringify');
generate = require('csv-generate');
generator = generate({objectMode: true, seed: 1, headers: 2});
stringifier = stringify();
generator.pipe(stringifier).pipe(process.stdout);
Migration
Most of the generator is imported from its parent project CSV in a effort
to split it between the generator, the parser, the transformer and the
stringifier.
Development
Tests are executed with mocha. To install it, simple run npm install
followed by npm test
. It will install mocha and its dependencies in your
project "node_modules" directory and run the test suite. The tests run
against the CoffeeScript source files.
To generate the JavaScript files, run make build
.
The test suite is run online with Travis against the versions
0.9, 0.10 and 0.11 of Node.js.
Contributors