convert-csv-to-json2
v1.0.2
Published
Convert CSV to JSON
Maintainers
Readme
CSVtoJSON
This project is not dependent on others packages or libraries.
This project started as a fork to Iuccio's csvToJSON but quickly turned into a spiritual successor. There are 3 major differences between this project and the original.
- Typescript by default
- Code reorganized to remove duplicate definitions.
- Default field deliminator is now a comma (',') instead of a semi-colon (';')
If you found this project useful, please go and express your gratitude to Iuccio.
Table of Contents
- Description
- Support for JS & TS
- Prerequisites
- Install npm convert-csv-to-json package
- Development
- CI CD github action
- License
- Buy me a Coffee
Description
Converts csv files to JSON files with Node.js.
Give an input file like:
| first_name | last_name | email | gender | age | zip | registered | | :--------: | :-------: | :------------------: | :----: | :-: | :-: | :--------: | | Constantin | Langsdon | [email protected] | Male | 96 | 123 | true | | Norah | Raison | [email protected] | Female | 32 | | false |
e.g. :
first_name;last_name;email;gender;age;zip;registered
Constantin;Langsdon;[email protected];Male;96;123;true
Norah;Raison;[email protected];Female;32;;falsewill generate:
[
{
"first_name": "Constantin",
"last_name": "Langsdon",
"email": "[email protected]",
"gender": "Male",
"age": "96",
"zip": "123",
"registered": "true"
},
{
"first_name": "Norah",
"last_name": "Raison",
"email": "[email protected]",
"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-json2 --save
$ yarn install convert-csv-to-json2 --save
$ pnpm add convert-csv-to-json2 --saveUsage
Generate JSON file
import csvToJson from 'convert-csv-to-json2';
const fileInputName = 'myInputFile.csv';
const fileOutputName = 'myOutputFile.json';
csvToJson.generateJsonFileFromCsv(fileInputName, fileOutputName);Generate Array of Object in JSON format
import csvToJson from 'convert-csv-to-json2';
const 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;[email protected];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:
[
{
"firstName": "Constantin",
"lastName": "Langsdon",
"email": "[email protected]",
"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 comma (,), this means that during the parsing when a comma (,) 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 semicolon ; then:
csvToJson.fieldDelimiter(';').getJsonFromCsv(fileInputName);Trim header field
The content of the field header is cut off at the beginning and end of the string. E.g. " Last Name " -> "Last Name".
Trim header field with whitespaces
Use the method trimHeaderFieldWhiteSpace(true) to remove the whitespaces in an header field (E.g. " Last Name " -> "LastName"):
csvToJson.trimHeaderFieldWhiteSpace(true).getJsonFromCsv(fileInputName);Support Quoted Fields
To be able to parse correctly fields wrapped in quote, like the last_name in the first row in the following example:
| first_name | last_name | email | | :--------: | :------------------------: | :------------------: | | Constantin | "Langsdon,Nandson,Gangson" | [email protected] |
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": "[email protected]"
}
]Index header
If the header is not on the first line you can define the header index like:
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": "[email protected]",
"gender": "Male",
"age": 96,
"zip": 123,
"registered": true
},
{
"first_name": "Norah",
"last_name": "Raison",
"email": "[email protected]",
"gender": "Female",
"age": 32,
"zip": "",
"registered": false
}
]Number
The property age is printed as
"age": 32instead of
"age": "32"Boolean
The property registered is printed as
"registered": trueinstead of
"registered": "true"Encoding
You can read and decode files with the following encoding:
- utf8:
csvToJson.utf8Encoding().getJsonFromCsv(fileInputName); - ucs2:
csvToJson.ucs2Encoding().getJsonFromCsv(fileInputName); - utf16le:
csvToJson.utf16leEncoding().getJsonFromCsv(fileInputName); - latin1:
csvToJson.latin1Encoding().getJsonFromCsv(fileInputName); - ascii:
csvToJson.asciiEncoding().getJsonFromCsv(fileInputName); - base64:
csvToJson.base64Encoding().getJsonFromCsv(fileInputName); - hex:
csvToJson.hexEncoding().getJsonFromCsv(fileInputName);
Chaining Pattern
The exposed API is implemented with the Method Chaining Pattern, which means that multiple methods can be chained, e.g.:
import csvToJson from 'convert-csv-to-json2';
csvToJson
.fieldDelimiter(',')
.formatValueByType()
.parseSubArray('*', ',')
.supportQuotedField(true)
.getJsonFromCsv('myInputFile.csv');Development
- Download all csvToJson dependencies:
pnpm install - Run Tests
pnpm test - Debug Tests
pnpm run test-debug
