CSVtoJSON
This project is not dependent on others packages or libraries.
This repository uses
Follow me, and consider starring the project to show your :heart: and support.
Table of Contents
Install Usage
+ [Generate JSON file](#generate-json-file)
+ [Generate Array of Object in JSON format](#generate-array-of-object-in-json-format)
+ [Generate Object with sub array](#generate-object-with-sub-array)
+ [Define field delimiter](#define-field-delimiter)
+ [Support Quoted Fields](#support-quoted-fields)
+ [Index header](#index-header)
+ [Empty rows](#empty-rows)
+ [Format property value by type](#format-property-value-by-type)
- [Number](#number)
- [Boolean](#boolean)
+ [Encoding](#encoding)
Chaining PatternDescription
Converts csv files to JSON files with Node.js.Give an input file like:
|firstname|lastname|email|gender|age|zip|registered| |:----------:|:-------:|:---:|:----:|:---:|:---:|:---:| |Constantin|Langsdon|clangsdon0@hc360.com|Male|96|123|true| |Norah|Raison|nraison1@wired.com|Female|32| |false|
e.g. :
will generate:
[
{
"first_name": "Constantin",
"last_name": "Langsdon",
"email": "clangsdon0@hc360.com",
"gender": "Male",
"age": "96",
"zip": "123",
"registered": "true"
},
{
"first_name": "Norah",
"last_name": "Raison",
"email": "nraison1@wired.com",
"gender": "Female",
"age": "32",
"zip": "",
"registered": "false"
}
]
Support for JS & TS
This package is compatible with and .Prerequisites
NPM (see Installing Npm).Install npm convert-csv-to-json package
Go to NPM package convert-csv-to-json.Install
Install package in your package.json$ npm install convert-csv-to-json --save
Install package on your machine
$ npm install -g convert-csv-to-json
Usage
Generate JSON file
let csvToJson = require('convert-csv-to-json');
let fileInputName = 'myInputFile.csv';
let fileOutputName = 'myOutputFile.json';
csvToJson.generateJsonFileFromCsv(fileInputName,fileOutputName);
Generate Array of Object in JSON format
let csvToJson = require('convert-csv-to-json');
let json = csvToJson.getJsonFromCsv("myInputFile.csv");
for(let i=0; i<json.length;i++){
console.log(json[i]);
}
Generate Object with sub array
firstName;lastName;email;gender;age;birth;sons
Constantin;Langsdon;clangsdon0@hc360.com;Male;96;10.02.1965;*diego,marek,dries*
Given the above CSV example, to generate a JSON Object with properties that contains sub Array, like the property sons
with the values diego,marek,dries you have to call the function ``parseSubArray(delimiter, separator)
`` .
To generate the JSON Object with sub array from the above CSV example:
csvToJson.parseSubArray('*',',')
.getJsonFromCsv('myInputFile.csv');
```
The result will be:
```json
[
{
"firstName": "Constantin",
"lastName": "Langsdon",
"email": "clangsdon0@hc360.com",
"gender": "Male",
"age": "96",
"birth": "10.02.1965",
"sons": ["diego","marek","dries"]
}
]
```
#### Define field delimiter
A field delimiter is needed to split the parsed values. As default the field delimiter is the **semicolon** (**;**), this means that during the parsing when a **semicolon (;)** is matched a new JSON entry is created.
In case your CSV file has defined another field delimiter you have to call the function ```fieldDelimiter(myDelimiter)``` and pass it as parameter the field delimiter.
E.g. if your field delimiter is the comma **,** then:
```js
csvToJson.fieldDelimiter(',')
.getJsonFromCsv(fileInputName);
Support Quoted Fields
To be able to parse correctly fields wrapped in quote, like the lastname in the first row in the following example:|firstname| lastname |email| |:----------:|:--------------------------:|:---:| |Constantin| "Langsdon,Nandson,Gangson" |clangsdon0@hc360.com|
you need to activate the support quoted fields feature:
csvToJson.supportQuotedField(true)
.getJsonFromCsv(fileInputName);
The result will be:
[
{
"firstName": "Constantin",
"lastName": "Langsdon,Nandson,Gangson",
"email": "clangsdon0@hc360.com"
}
]
```
#### Index header
If the header is not on the first line you can define the header index like:
```js
csvToJson.indexHeader(3)
.getJsonFromCsv(fileInputName);
Empty rows
Empty rows are ignored and not parsed.Format property value by type
If you want that a number will be printed as a Number type, and values true or false is printed as a boolean Type, use:csvToJson.formatValueByType()
.getJsonFromCsv(fileInputName);
For example: [
{
"first_name": "Constantin",
"last_name": "Langsdon",
"email": "clangsdon0@hc360.com",
"gender": "Male",
"age": 96,
"zip": 123,
"registered": true
},
{
"first_name": "Norah",
"last_name": "Raison",
"email": "nraison1@wired.com",
"gender": "Female",
"age": 32,
"zip": "",
"registered": false
}
]
Number
The property age is printed as"age": 32
instead of
"age": "32"
```
##### Boolean
The property **registered** is printed as
```json
"registered": true
instead of
"registered": "true"
```
#### Encoding
You can read and decode files with the following encoding:
* utf8:
```js
csvToJson.utf8Encoding()
.getJsonFromCsv(fileInputName);
```
* ucs2:
```js
csvToJson.ucs2Encoding()
.getJsonFromCsv(fileInputName);
```
* utf16le:
```js
csvToJson.utf16leEncoding()
.getJsonFromCsv(fileInputName);
```
* latin1:
```js
csvToJson.latin1Encoding()
.getJsonFromCsv(fileInputName);
```
* ascii:
```js
csvToJson.asciiEncoding()
.getJsonFromCsv(fileInputName);
```
* base64:
```js
csvToJson.base64Encoding()
.getJsonFromCsv(fileInputName);
```
* hex:
```js
csvToJson.hexEncoding()
.getJsonFromCsv(fileInputName);
```
### Chaining Pattern
The exposed API is implemented with the [Method Chaining Pattern](https://en.wikipedia.org/wiki/Method_chaining), which means that multiple methods can be chained, e.g.:
```js
let csvToJson = require('convert-csv-to-json');
csvToJson.fieldDelimiter(',')
.formatValueByType()
.parseSubArray("*",',')
.supportQuotedField(true)
.getJsonFromCsv('myInputFile.csv');
Development
- Download all csvToJson dependencies:
~~~
npm install
~~~
- Run Tests
~~~
npm test
~~~
- Debug Tests
~~~
npm run test-debug
~~~
CI CD github action
This repository uses the GitHub Action iuccio/npm-semantic-publish-action@latest to publish the npm packeges. Pushing on the master branch, depending on the git message, an new version will always be released. If the commit message contains the keyword:- MAJOR: new major relase, e.g. v1.0.0 -> v2.0.0
- PATCH: new patch relase, e.g. v1.0.0 -> v1.0.1
- without any of the above keywords a new minor relase will be applied, e.g. v1.0.0 -> v1.1.0
License
CSVtoJSON is licensed under the GNU General Public License v3.0 License.Buy me a Coffee
Just if you want to support this repository:* **BTC** tip address:
37vdjQhbaR7k7XzhMKWzMcnqUxfw1njBNk