Blazing fast and Comprehensive CSV Parser for Node.JS / Browser / Command Line.
Blazing fast and Comprehensive CSV Parser for Node.JS / Browser / Command Line.
csvtojson module is a comprehensive nodejs csv parser to convert csv to json or column arrays. It can be used as node.js library / command line tool / or in browser. Below are some features:
Here is a free online csv to json convert service utilizing latest csvtojson module.
csvtojson has released version 2.0.0.
v1, open this pageIt is still able to use v1 with [email protected]
// v1
const csvtojsonV1=require("csvtojson/v1");
// v2
const csvtojsonV2=require("csvtojson");
const csvtojsonV2=require("csvtojson/v2");
npm i --save csvtojson/** csv file
a,b,c
1,2,3
4,5,6
*/
const csvFilePath='<path to csv file>'
const csv=require('csvtojson')
csv()
.fromFile(csvFilePath)
.then((jsonObj)=>{
console.log(jsonObj);
/**
* [
* {a:"1", b:"2", c:"3"},
* {a:"4", b:"5". c:"6"}
* ]
*/
})
// Async / await usage
const jsonArray=await csv().fromFile(csvFilePath);
/**
csvStr:
1,2,3
4,5,6
7,8,9
*/
const csv=require('csvtojson')
csv({
noheader:true,
output: "csv"
})
.fromString(csvStr)
.then((csvRow)=>{
console.log(csvRow) // => [["1","2","3"], ["4","5","6"], ["7","8","9"]]
})
const request=require('request')
const csv=require('csvtojson')
csv()
.fromStream(request.get('http://mywebsite.com/mycsvfile.csv'))
.subscribe((json)=>{
return new Promise((resolve,reject)=>{
// long operation for each json e.g. transform / write into database.
})
},onError,onComplete);
/**
csvStr:
a,b,c
1,2,3
4,5,6
*/
const csv=require('csvtojson')
csv({output:"line"})
.fromString(csvStr)
.subscribe((csvLine)=>{
// csvLine => "1,2,3" and "4,5,6"
})const csv=require('csvtojson');
const readStream=require('fs').createReadStream(csvFilePath);
const writeStream=request.put('http://mysite.com/obj.json');
readStream.pipe(csv()).pipe(writeStream);
To find more detailed usage, please see API section
$ npm i -g csvtojson$ csvtojson [options] <csv file path>Convert csv file and save result to json file:
$ csvtojson source.csv > converted.jsonPipe in csv data:
$ cat ./source.csv | csvtojson > converted.jsonPrint Help:
$ csvtojsonrequire('csvtojson') returns a constructor function which takes 2 arguments:
const csv=require('csvtojson')
const converter=csv(parserParameters, streamOptions)Both arguments are optional.
For Stream Options please read Stream Option from Node.JS
parserParameters is a JSON object like:
const converter=csv({
noheader:true,
trim:true,
})Following parameters are supported:
true if version < 1.1.4)headName: <String | Function | ColParser> . e.g. {field1:'number'} will use built-in number parser to convert value of the field1 column to number. For more information See details beloweol like \n) as a row. This will prevent eol characters from being used within a row (even inside a quoted field). Default is false. Change to true if you are confident no inline line breaks (like line break in a cell which has multi line text)..then is called (or await is used). If this is not desired, set this to false. Default is true.
All parameters can be used in Command Line tool.Since v2.0.0, asynchronous processing has been fully supported.
e.g. Process each JSON result asynchronously.
csv().fromFile(csvFile)
.subscribe((json)=>{
return new Promise((resolve,reject)=>{
// Async operation on the json
// don't forget to call resolve and reject
})
})For more details please read:
Converter class defined a series of events.
header event is emitted for each CSV file once. It passes an array object which contains the names of the header row.
const csv=require('csvtojson')
csv()
.on('header',(header)=>{
//header=> [header1, header2, header3]
})header is always an array of strings without types.
data event is emitted for each parsed CSV line. It passes buffer of stringified JSON in ndjson format unless objectMode is set true in stream option.
const csv=require('csvtojson')
csv()
.on('data',(data)=>{
//data is a buffer object
const jsonStr= data.toString('utf8')
})error event is emitted if any errors happened during parsing.
const csv=require('csvtojson')
csv()
.on('error',(err)=>{
console.log(err)
})Note that if error being emitted, the process will stop as node.js will automatically unpipe() upper-stream and chained down-stream1. This will cause end event never being emitted because end event is only emitted when all data being consumed 2. If need to know when parsing finished, use done event instead of end.
done event is emitted either after parsing successfully finished or any error happens. This indicates the processor has stopped.
const csv=require('csvtojson')
csv()
.on('done',(error)=>{
//do some stuff
})if any error during parsing, it will be passed in callback.
the hook -- preRawData will be called with csv string passed to parser.
const csv=require('csvtojson')
// synchronous
csv()
.preRawData((csvRawData)=>{
var newData=csvRawData.replace('some value','another value');
return newData;
})
// asynchronous
csv()
.preRawData((csvRawData)=>{
return new Promise((resolve,reject)=>{
var newData=csvRawData.replace('some value','another value');
resolve(newData);
})
})The function is called each time a file line has been parsed in csv stream. The lineIdx is the file line number in the file starting with 0.
const csv=require('csvtojson')
// synchronous
csv()
.preFileLine((fileLineString, lineIdx)=>{
if (lineIdx === 2){
return fileLineString.replace('some value','another value')
}
return fileLineString
})
// asynchronous
csv()
.preFileLine((fileLineString, lineIdx)=>{
return new Promise((resolve,reject)=>{
// async function prNo open issues yet, or sync has not completed.