convert-csv-to-json

Convert CSV to JSON

Downloads in past

Stats

StarsIssuesVersionUpdatedCreatedSize
convert-csv-to-json
2.46.018 days ago7 years agoMinified + gzip package size for convert-csv-to-json in KB

Readme

CSVtoJSON
Node CI CodeQL Known Vulnerabilities Code Climate NPM Version NodeJS Version Downloads NPM total downloads
TypeScript JavaScript
This project is not dependent on others packages or libraries.
This repository uses GitHub Action  - iuccio/npm-semantic-publish-action@latest
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 Pattern

Description

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. : ~ firstname;lastname;email;gender;age;zip;registered Constantin;Langsdon;clangsdon0@hc360.com;Male;96;123;true Norah;Raison;nraison1@wired.com;Female;32;;false ~
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 JavaScript and TypeScript.

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