You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							394 lines
						
					
					
						
							9.0 KiB
						
					
					
				
			
		
		
	
	
							394 lines
						
					
					
						
							9.0 KiB
						
					
					
				| 
 | |
| csvjson
 | |
| =================
 | |
| 
 | |
| Simple CSV to JSON and JSON to CSV converter with stream support
 | |
| -----------------------------------------
 | |
| for Node.js and Browser.
 | |
| -------------------------------------
 | |
| 
 | |
| © Pradeep Mishra, Licensed under the MIT-LICENSE
 | |
| 
 | |
| 
 | |
| 
 | |
| Features
 | |
| --------
 | |
| 
 | |
| * CSV to JSON object
 | |
| * CSV to schema JSON object
 | |
| * CSV to array object
 | |
| * CSV to column array object
 | |
| * JSON object to CSV
 | |
| * JSON array to CSV
 | |
| * Stream support
 | |
| 
 | |
| 
 | |
| 
 | |
| Example usage
 | |
| -------------
 | |
| 
 | |
| ```javascript
 | |
| var csvjson = require('csvjson');
 | |
| 
 | |
| /*
 | |
|     sample.csv
 | |
| 
 | |
|     sr,name,age,gender
 | |
|     1,rocky,33,male
 | |
|     2,jacky,22,male
 | |
|     3,suzy,21,female
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| /*
 | |
|     schema_sample.csv
 | |
| 
 | |
|     created,contact.name,contact.age+,contact.number+,address[],address[],contact.hobbies[],contact.hobbies[],-id
 | |
|     2014-11-12,Pradeep,25,4352436,MG Road,Mumbai,pc games,guitar,5
 | |
|     2014-10-06,Arnav,16,7364537,KB Road,Mumbai,pc games,traveling,7
 | |
| 
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| /*
 | |
| schema_sample2.csv
 | |
| 
 | |
| name,age,contacts[0].name,contacts[0].phone,contacts[1].name,contacts[1].phone,musician,instruments.past,instruments.current[],instruments.current[]
 | |
| Mark,33,Jim Palmer,8888888888,Marcus Aurelius,7309899877,Yes,Guitar,Drums,Bass Guitar
 | |
| Jeff,27,John Doe,8009008000,Michael Corleone,2121001000,Yes,Drums,Flute,Trumpet
 | |
| 
 | |
| */
 | |
| 
 | |
| /*
 | |
| jsoncsv.json
 | |
| 
 | |
| 
 | |
| {
 | |
|  "book": {
 | |
|    "person": [
 | |
|      {
 | |
|        "firstName": "Jane",
 | |
|        "lastName": "Doe",
 | |
|        "age": "25",
 | |
|        "address": {
 | |
|          "streetAddress": "21 2nd Street",
 | |
|          "city": "Las Vegas",
 | |
|          "state": "NV",
 | |
|          "postalCode": "10021-3100"
 | |
|        },
 | |
|        "hobbies" : ["gaming", "volleyball"]
 | |
|      },
 | |
|      {
 | |
|        "firstName": "Agatha",
 | |
|        "lastName": "Doe",
 | |
|        "age": "25",
 | |
|        "address": {
 | |
|          "streetAddress": "21 2nd Street",
 | |
|          "city": "Las Vegas",
 | |
|          "state": "NV",
 | |
|          "postalCode": "10021-3100"
 | |
|        },
 | |
|        "hobbies" : ["dancing", "politics"]
 | |
|      }
 | |
|    ]
 | |
|  }
 | |
| }
 | |
| 
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| ```
 | |
| 
 | |
| convert csv data to json object
 | |
| ----------------------------------------
 | |
| ```javascript
 | |
| var data = fs.readFileSync(path.join(__dirname, 'schema_sample2.csv'), { encoding : 'utf8'});
 | |
| /*
 | |
| {
 | |
|     delimiter : <String> optional default is ","
 | |
|     quote     : <String|Boolean> default is null
 | |
| }
 | |
| */
 | |
| var options = {
 | |
|   delimiter : ',', // optional
 | |
|   quote     : '"' // optional
 | |
| };
 | |
| // for multiple delimiter you can use regex pattern like this /[,|;]+/
 | |
| 
 | |
| /* 
 | |
|   for importing headers from different source you can use headers property in options 
 | |
|   var options = {
 | |
|     headers : "sr,name,age,gender"
 | |
|   };
 | |
| */
 | |
| 
 | |
| csvjson.toObject(data, options);
 | |
| 
 | |
| /*
 | |
|     returns
 | |
| 
 | |
|     [
 | |
|         {
 | |
|             sr : 1,
 | |
|             name : "rocky",
 | |
|             age : 33,
 | |
|             gender : "male"
 | |
|         },
 | |
|         {
 | |
|             sr : 2,
 | |
|             name : "jacky",
 | |
|             age : 22,
 | |
|             gender : "male"
 | |
|         },
 | |
|         {
 | |
|             sr : 3,
 | |
|             name : "suzy",
 | |
|             age : 21,
 | |
|             gender : "female"
 | |
|         }
 | |
| 
 | |
|     ]
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| ```
 | |
| convert csv data to schema json object
 | |
| -----------------------------------------------
 | |
| ```javascript
 | |
| 
 | |
| /*
 | |
|     for creating schema of json object following key can be used in header of csv file:
 | |
| 
 | |
|     .   for defining nested json object
 | |
|     []  for defining data as array (suffix)
 | |
|         -- can add delimiter in the array (i.e. [;] for delimiter of ;)
 | |
|         -- can nest objects in the array, index must be listed (i.e. [1] for index 1)
 | |
|     +   for defining data as integer (suffix)
 | |
|     -   for omitting data from result output (prefix)
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| /*
 | |
|     schema_sample.csv
 | |
| 
 | |
|     created,contact.name,contact.age+,contact.number+,address[],address[],contact.hobbies[;],-id,friends[0].name,friends[0].phone,friends[1].name,friends[1].phone
 | |
|     2014-11-12,Pradeep,25,4352436,MG Road,Mumbai,pc games; guitar,5,Jeff,8761234567,Mike,1234567890
 | |
|     2014-10-06,Arnav,16,7364537,KB Road,Mumbai,pc games; traveling,7,Steve,555555555,Pradeep,4352436
 | |
| 
 | |
| */
 | |
| 
 | |
| var data = fs.readFileSync(path.join(__dirname, 'schema_sample.csv'), { encoding : 'utf8'});
 | |
| /*
 | |
| {
 | |
|     delimiter : <String> optional default is ","
 | |
|     quote     : <String|Boolean> default is null
 | |
| }
 | |
| */
 | |
| var options = {
 | |
|   delimiter : ',', // optional
 | |
|   quote     : '"' // optional
 | |
| };
 | |
| 
 | |
| // for multiple delimiter you can use regex pattern like this /[,|;]+/
 | |
| 
 | |
| /* 
 | |
|   for importing headers from different source you can use headers property in options 
 | |
|   var options = {
 | |
|     headers : "created,contact.name,contact.age+,contact.number+,address[],address[],contact.hobbies[;],-id,friends[0].name,friends[0].phone,friends[1].name,friends[1].phone"
 | |
|   };
 | |
| */
 | |
| 
 | |
| csvjson.toSchemaObject(data, options)
 | |
| 
 | |
| /*
 | |
|     returns
 | |
| 
 | |
|     [
 | |
|         {
 | |
|             "created":"2014-11-12",
 | |
|             "contact":{
 | |
|                 "name":"Pradeep","
 | |
|                 age":25,
 | |
|                 "number":4352436,
 | |
|                 "hobbies":["pc games","guitar"]
 | |
| 
 | |
|             },
 | |
|             "address":["MG Road","Mumbai"],
 | |
|             "friends":[
 | |
|                 {
 | |
|                     "name": "Jeff",
 | |
|                     "phone": "8761234567"
 | |
|                 },
 | |
|                 {
 | |
|                     "name": "Mike",
 | |
|                     "phone": "1234567890"
 | |
|                 }
 | |
|             ]
 | |
|         },
 | |
|         {
 | |
|             "created":"2014-10-06",
 | |
|             "contact":{"
 | |
|                 name":"Arnav",
 | |
|                 "age":16,
 | |
|                 "number":7364537,
 | |
|                 "hobbies":["pc games","traveling"]
 | |
| 
 | |
|             },
 | |
|             "address":["KB Road","Mumbai"],
 | |
|             "friends":[
 | |
|                 {
 | |
|                     "name": "Steve",
 | |
|                     "phone": "5555555555"
 | |
|                 },
 | |
|                 {
 | |
|                     "name": "Pradeep",
 | |
|                     "phone": "4352436"
 | |
|                 }
 | |
|             ]
 | |
|         }
 | |
| 
 | |
|     ]
 | |
| 
 | |
| 
 | |
| */
 | |
| 
 | |
| ```
 | |
| convert csv data to array object
 | |
| -----------------------------------------
 | |
| ```javascript
 | |
| 
 | |
| var data = fs.readFileSync(path.join(__dirname, 'sample.csv'), { encoding : 'utf8'});
 | |
| 
 | |
| /*
 | |
| {
 | |
|     delimiter : <String> optional default is ","
 | |
|     quote     : <String|Boolean> default is null
 | |
| }
 | |
| */
 | |
| var options = {
 | |
|   delimiter : ',', // optional
 | |
|   quote     : '"' // optional
 | |
| };
 | |
| 
 | |
| // for multiple delimiter you can use regex pattern like this /[,|;]+/
 | |
| 
 | |
| csvjson.toArray(data, options);
 | |
| 
 | |
| /*
 | |
|     returns
 | |
|     [
 | |
|         ["sr","name","age","gender"],
 | |
|         ["1","rocky","33","male"],
 | |
|         ["2","jacky","22","male"],
 | |
|         ["3","suzy","21","female"]
 | |
|     ]
 | |
| 
 | |
| */
 | |
| 
 | |
| ```
 | |
| convert csv data to column array object
 | |
| ---------------------------------------
 | |
| ```javascript
 | |
| 
 | |
| var data = fs.readFileSync(path.join(__dirname, 'sample.csv'), { encoding : 'utf8'});
 | |
| 
 | |
| /*
 | |
| {
 | |
|     delimiter : <String> optional default is ","
 | |
|     quote     : <String|Boolean> default is null
 | |
| }
 | |
| */
 | |
| var options = {
 | |
|   delimiter : ',', // optional
 | |
|   quote     : '"' // optional
 | |
| };
 | |
| 
 | |
| // for multiple delimiter you can use regex pattern like this /[,|;]+/
 | |
| 
 | |
| /* 
 | |
|   for importing headers from different source you can use headers property in options 
 | |
|   var options = {
 | |
|     headers : "sr,name,age,gender"
 | |
|   };
 | |
| */
 | |
| 
 | |
| csvjson.toColumnArray(data, options);
 | |
| 
 | |
| /*
 | |
|     returns
 | |
| 
 | |
|     {
 | |
|         sr: [ '1', '2', '3' ],
 | |
|         name: [ 'rocky', 'jacky', 'suzy' ],
 | |
|         age: [ '33', '22', '21' ],
 | |
|         gender: [ 'male', 'male', 'female' ]
 | |
|     }
 | |
| 
 | |
| */
 | |
| 
 | |
| 
 | |
| ```
 | |
| convert json object to csv data
 | |
| -------------------------------
 | |
| ```javascript
 | |
| 
 | |
| var data = fs.readFileSync(path.join(__dirname, 'jsoncsv.json'), { encoding : 'utf8'});
 | |
| var options = {
 | |
|     delimiter   : ",",
 | |
|     wrap        : false
 | |
| }
 | |
| 
 | |
| /* supported options
 | |
| 
 | |
|     delimiter = <String> optional default value is ","
 | |
|     wrap  = <String|Boolean> optional default value is false
 | |
|     headers = <String> optional supported values are "full", "none", "relative", "key"
 | |
|     objectDenote = <String> optional default value is "."
 | |
|     arrayDenote = <String> optional default value is "[]"
 | |
| */
 | |
| 
 | |
| 
 | |
| csvjson.toCSV(data, options);
 | |
| 
 | |
| /*
 | |
| returns
 | |
| 
 | |
| book.person[].firstName,book.person[].lastName,book.person[].age,book.person[].address.streetAddress,book.person[].address.city,book.person[].address.state,book.person[].address.postalCode,book.person[].hobbies[]
 | |
| Jane,Doe,25,21 2nd Street,Las Vegas,NV,10021-3100,gaming;volleyball
 | |
| Agatha,Doe,25,21 2nd Street,Las Vegas,NV,10021-3100,dancing;politics
 | |
| 
 | |
| */
 | |
| ```
 | |
| convert csv to json using stream
 | |
| -----------------------------------------
 | |
| ```javascript
 | |
| 
 | |
| var read = fs.createReadStream(path.join(__dirname, 'sample.csv'));
 | |
| var write = fs.createWriteStream(path.join(__dirname, 'sample.json'));
 | |
| var toObject = csvjson.stream.toObject();
 | |
| var stringify = csvjson.stream.stringify();
 | |
| read.pipe(toObject).pipe(stringify).pipe(write);
 | |
| 
 | |
| /*
 | |
| following functions available for stream transformation
 | |
| csvjson.stream.toObject()
 | |
| csvjson.stream.toArray()
 | |
| csvjson.stream.toColumnArray()
 | |
| csvjson.stream.toSchemaObject()
 | |
| */
 | |
| 
 | |
| /*
 | |
| csvjson.stream.stringify([space<number>])
 | |
| stringify function accepts optional space parameter to format output
 | |
| */
 | |
| 
 | |
| ```
 | |
| ```bash
 | |
| npm install csvjson --save
 | |
| ```
 |