Package Exports
- jsonexport
- jsonexport/dist
- jsonexport/dist/index
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (jsonexport) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
jsonexport
This module makes easy to convert JSON to CSV and its very customizable.
Table of Contents
Usage
Installation command is npm install jsonexport.
Run tests with npm test.
var jsonexport = require('jsonexport');
jsonexport({lang: 'Node.js',module: 'jsonexport'}, {rowDelimiter: '|'}, function(err, csv){
if(err) return console.log(err);
console.log(csv);
});CLI
Global installation command is npm install -g jsonexport.
Convert JSON to CSV using cat data.json | jsonexport or jsonexport data.json
Usage: jsonexport <JSON filename> <CSV filename>
Browser
Use the code in the folder named dist to run jsonexport in the browser
Browser Import Examples
Webpack
var jsonexport = require("jsonexport/dist")Typescript
import * as jsonexport from "jsonexport/dist"Stream
var jsonexport = require('jsonexport');
var fs = require('fs');
var reader = fs.createReadStream('data.json');
var writer = fs.createWriteStream('out.csv');
reader.pipe(jsonexport()).pipe(writer);JSON Array Example
Simple Array
Code
var jsonexport = require('jsonexport');
var contacts = [{
name: 'Bob',
lastname: 'Smith'
},{
name: 'James',
lastname: 'David'
},{
name: 'Robert',
lastname: 'Miller'
},{
name: 'David',
lastname: 'Martin'
}];
jsonexport(contacts,function(err, csv){
if(err) return console.log(err);
console.log(csv);
});Result
name,lastname
Bob,Smith
James,David
Robert,Miller
David,MartinComplex Array
Code
var jsonexport = require('jsonexport');
var contacts = [{
name: 'Bob',
lastname: 'Smith',
family: {
name: 'Peter',
type: 'Father'
}
},{
name: 'James',
lastname: 'David',
family:{
name: 'Julie',
type: 'Mother'
}
},{
name: 'Robert',
lastname: 'Miller',
family: null,
location: [1231,3214,4214]
},{
name: 'David',
lastname: 'Martin',
nickname: 'dmartin'
}];
jsonexport(contacts,function(err, csv){
if(err) return console.log(err);
console.log(csv);
});Result
name,lastname,family.name,family.type,family,location,nickname
Bob,Smith,Peter,Father
James,David,Julie,Mother
Robert,Miller,,,,1231;3214;4214
David,Martin,,,,,dmartinJSON Object Example
Simple Object
Code
var jsonexport = require('jsonexport');
var stats = {
cars: 12,
roads: 5,
traffic: 'slow'
};
jsonexport(stats,function(err, csv){
if(err) return console.log(err);
console.log(csv);
});Result
cars,12
roads,5
traffic,slowComplex Object
Code
var jsonexport = require('jsonexport');
var stats = {
cars: 12,
roads: 5,
traffic: 'slow',
speed: {
max: 123,
avg: 20,
min: 5
},
size: [10,20]
};
jsonexport(stats,function(err, csv){
if(err) return console.log(err);
console.log(csv);
});Result
cars,12
roads,5
traffic,slow
speed.max,123
speed.avg,20
speed.min,5
size,10;20Options
In order to get the most of out of this module, you can customize many parameters and functions.
headerPathString-StringUsed to create the propriety path, defaults to.examplecontact: {name: 'example}=contact.namefillGaps-BooleanSet this option if don't want to have empty cells in case of an object with multiple nested items (array prop), defaults tofalseIssue #22headers-ArrayUsed to set a custom header order, defaults to[]example['lastname', 'name']rename-ArrayUsed to set a custom header text, defaults to[]example['Last Name', 'Name']rowDelimiter-StringChange the file row delimiter- Defaults to
,(cvs format). - Use
\tfor xls format. - Use
;for (windows excel .csv format).
- Defaults to
textDelimiter-StringThe character used to escape the text content if needed (default to")endOfLine-StringReplace the OS default EOL.mainPathItem-StringEvery header will have themainPathItemas the base.arrayPathString-StringThis is used to output primitive arrays in a single column, defaults to;booleanTrueString-StringWill be used instead oftrue.booleanFalseString-StringWill be used instead offalse.includeHeaders-BooleanSet this option to false to hide the CSV headers.undefinedString-StringIf you want to display a custom value for undefined strings, use this option. Defaults to.verticalOutput-BooleanSet this option to false to create a horizontal output for JSON Objects, headers in the first row, values in the second.typeHandlers-{typeName:(value, index, parent)=>anyA key map of constructors used to match by instance to create a value using the defined function (see example)
Deprecated Options (Use typeHandlers)
handleString-FunctionUse this to customize allStringsin the CSV file.handleNumber-FunctionUse this to customize allNumbersin the CSV file.handleBoolean-FunctionUse this to customize allBooleansin the CSV file.handleDate-FunctionUse this to customize allDatesin the CSV file. (default to date.toLocaleString)
typeHandlers
Define types by constructors and what function to run when that type is matched
var jsonexport = require('jsonexport');
//data
var contacts = {
'a' : Buffer.from('a2b', 'utf8'),
'b' : Buffer.from('other field', 'utf8'),
'x' : 22,
'z' : function(){return 'bad ace'}
};
var options={
//definitions to type cast
typeHandlers:{
Array:function(value,index,parent){
return 'replaced-array';
},
Boolean:function(value,index,parent){
return 'replaced-boolean';
},
Function:function(value,index,parent){
return value()
},
Number:function(value,index,parent){
return 'replaced-number';
},
String:function(value,index,parent){
return 'replaced-string';
},
Buffer:function(value,index,parent){
return value.toString()
}
}
}
jsonexport(contacts, options, function(err, csv){
console.log( csv )
});The output would be:
a,a2b
b,other field
x,replaced-number
z,bad aceWhen using typeHandlers, Do NOT do this
var options={
typeHandlers:{
Object:function(value,index,parent){
return 'EVERYTHING IS AN OBJECT';
}
}
}It is NOT an error, however the recursive result becomes illegable functionality strings