https://github.com/filipdanic/json2csvexporter
A simple little library for exporting simple JSON structures to a CSV file.
https://github.com/filipdanic/json2csvexporter
csv exporter json
Last synced: about 1 year ago
JSON representation
A simple little library for exporting simple JSON structures to a CSV file.
- Host: GitHub
- URL: https://github.com/filipdanic/json2csvexporter
- Owner: filipdanic
- License: mit
- Created: 2016-08-06T18:44:07.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2023-01-05T18:34:58.000Z (about 3 years ago)
- Last Synced: 2025-02-03T12:06:02.674Z (about 1 year ago)
- Topics: csv, exporter, json
- Language: JavaScript
- Homepage:
- Size: 299 KB
- Stars: 5
- Watchers: 3
- Forks: 2
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# json2csvexporter
This is a simple little library for exporting simple JSON structures to a CSV file. The download will trigger the user to save the file to their system. The library itself does not handle any File I/O.
Currently, json2csvexporter does not support nested JSON data. As such, you will probably need to reduce complex structures into a simple `key: value` schema.
To install:
`npm i json2csvexporter --save`
Provided are:
* umd-formatted file: dist/CSVExportService.js (browser-ready)
* commonjs-formatted file: lib/CSVExportService.js
* es-module: module/CSVExportService.js
Table of contents:
1. [Simple Example](#simple-example)
2. [Example with Custom Options](#example-with-custom-options)
3. [Example with TSV and Formatters](#example-with-tsv-and-formatters)
4. [JSON to CSV/TSV encoded String/Blob (without downloading on the client)](#json-to-csvtsv-encoded-stringblob-without-downloading-on-the-client)
5. [API and Options Docs](#api-and-options-docs)
6. [Browsers Support](#browsers-support)
7. [Contributing](#contributing)
## Simple Example
In this simple example we take a JSON object and print all of the properties in it to the CSV. There is also [an online demo available via CodeSandbox.](https://codesandbox.io/s/json2csvexporter-e8xbl)
```javascript
import CSVExportService from 'json2csvexporter';
...
const vehiclesJSON = [
{id: 1, make: 'Toyota', model: 'Corolla', year: 2014},
{id: 2, make: 'Ford', model: 'Mustang', year: 2012},
{id: 3, make: 'Toyota', model: '', year: ''}
];
const exporter = CSVExportService.create();
exporter.downloadCSV(vehiclesJSON);
```
This will generate the following CSV:
```csv
id,make,model,year
1,Toyota,Corolla,2014
2,Ford,Mustang,2012
3,Toyota,,
```
## Example with Custom Options
In this example, we will take the same JSON object from the previous example, but only print a list of properties that we want. We will also decorate the headers with different names.
```javascript
import CSVExportService from 'json2csvexporter';
...
const csvColumnsList = ['id', 'make', 'model', 'year'];
const csvColumnsMap = {
id: 'ID',
make: 'Make',
model: 'Model Name',
year: 'Year'
};
const vehiclesJSON = [
{id: 1, make: 'Toyota', model: 'Corolla', year: 2014},
{id: 2, make: 'Ford', model: 'Mustang', year: 2012},
{id: 3, make: 'Toyota', model: '', year: ''}
];
const exporter = CSVExportService.create({
columns: csvColumnsList,
headers: csvColumnsMap,
includeHeaders: true,
});
exporter.downloadCSV(vehiclesJSON);
```
This will generate the following CSV:
```csv
ID,Make,Model Name,Year
1,Toyota,Corolla,2014
2,Ford,Mustang,2012
3,Toyota,,
```
## Example with TSV and Formatters
In this example, we will make a TSV file and create formatting functions to style the content of certain properties.
```javascript
import CSVExportService from 'json2csvexporter';
...
// using the same vehiclesJSON as before...
const exporter = CSVExportService.create({
contentType: 'text/tsv',
filename: 'newformat.tsv',
delimiter: '\t',
formatters: {
id: (id) => {
return `#${id}`;
},
model: (model) => {
return model || 'Unknown model';
},
year: (year) => {
return year || 'Unknown year';
}
}
});
exporter.downloadCSV(vehiclesJSON);
```
This will generate the following TSV:
```tsv
id make model year
#1 Toyota Corolla 2014
#2 Ford Mustang 2012
#3 Toyota Unknown model Unknown year
```
## JSON to CSV/TSV encoded String/Blob (without downloading on the client)
```javascript
import CSVExportService from 'json2csvexporter';
...
const vehiclesJSON = [
{id: 1, make: 'Toyota', model: 'Corolla', year: 2014},
{id: 2, make: 'Ford', model: 'Mustang', year: 2012},
{id: 3, make: 'Toyota', model: '', year: ''}
];
const exporter = CSVExportService.create();
exporter.dataToString(vehiclesJSON);
```
This will return the CSV as a JavaScript String. This allows you to further manipulate the data, save to a file, a database or anything else.
Similarly, calling:
```javascript
exporter.createCSVBlob(vehiclesJSON);
```
Will return a `Blob {size: 76, type: "text/csv"}`, or in other words, a regular JavaScript blob object that is encoded as the type you specified (in this case a plain text/csv). You then manipulate this Blob object however you like.
## API and Options Docs
### Options
When creating a new `CSVExportService` you can pass in an options objects. These are the options that you can use:
- `columns`: an Array of Strings. Each element represents a property of the JSON object that should be extracted. If it is not provided, then the exporter will iterate through all of the properties.
- `contentType`: the content type of the file. Default is `text/csv`
- `delimiter`: the delimiter to separate values. The default is a comma.
- `formatters`: an Object. Each property defines how to format a value corresponding to the same key.
- `headers`: an Object. Works as a map to stylize keys in the header. E.g. `{firstName: 'First Name'}`
- `includeHeaders`: a Boolean. Defaults to true.
- `devMode`: a Boolean. Useful for debugging. Defaults to false.
### API
The `CSVExportService` implements two static methods: `create(options)` which returns a new instance of CSVExportService and `download(data, options)` which initializes a new service and downloads the data right away.
For more info, dive into the code. It is a very simple class.
## Browsers Support
| [
](http://godban.github.io/browsers-support-badges/)IE / Edge | [
](http://godban.github.io/browsers-support-badges/)Firefox | [
](http://godban.github.io/browsers-support-badges/)Chrome | [
](http://godban.github.io/browsers-support-badges/)Safari | [
](http://godban.github.io/browsers-support-badges/)Opera | [
](http://godban.github.io/browsers-support-badges/)iOS Safari |
| --------- | --------- | --------- | --------- | --------- | --------- |
| IE10, IE11, Edge| 4+ | 13+ | 5+ | 12+ | 7+ |
## Contributing
1. Submit issues or suggest features.
2. Send PRs with bug fixes, tests, new methods, better docs etc.
3. Share the love!
## Contributor list
1. [@filipdanic](https://github.com/filipdanic)
2. [@androidfanboi](https://github.com/androidfanboi)
3. [@erickzhao](https://github.com/erickzhao)
4. [@bira91](https://github.com/bira91)