Skip to content

Commit

Permalink
feat: Introduce formatters (#455)
Browse files Browse the repository at this point in the history
BREAKING CHANGE: In the JavaScript modules, `formatters` are introduced and the `quote`, `escapedQuote` and `excelStrings` options are removed. See the migration notes in the readme. CLI hasn't changed.
  • Loading branch information
juanjoDiaz authored Sep 30, 2020
1 parent 7ade321 commit 88ed6ee
Show file tree
Hide file tree
Showing 36 changed files with 2,238 additions and 1,376 deletions.
2 changes: 1 addition & 1 deletion .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"es6": true
},
"parserOptions": {
"ecmaVersion": 8
"ecmaVersion": 9
},
"extends": "eslint:recommended"
}
880 changes: 329 additions & 551 deletions README.md

Large diffs are not rendered by default.

13 changes: 10 additions & 3 deletions bin/json2csv.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const readFile = promisify(readFileOrig);
const writeFile = promisify(writeFileOrig);

const { unwind, flatten } = json2csv.transforms;
const { string: stringFormatterCtr, stringExcel: stringExcelFormatter } = json2csv.formatters;
const JSON2CSVParser = json2csv.Parser;
const Json2csvTransform = json2csv.Transform;

Expand Down Expand Up @@ -149,18 +150,24 @@ async function processStream(config, opts) {
separator: config.flattenSeparator
}));
}

const stringFormatter = stringFormatterCtr({
quote: config.quote,
escapedQuote: config.escapedQuote,
});
const formatters = {
string: config.excelStrings ? stringExcelFormatter({ stringFormatter }) : stringFormatter
};

const opts = {
transforms,
formatters,
fields: config.fields
? (Array.isArray(config.fields) ? config.fields : config.fields.split(','))
: config.fields,
defaultValue: config.defaultValue,
quote: config.quote,
escapedQuote: config.escapedQuote,
delimiter: config.delimiter,
eol: config.eol,
excelStrings: config.excelStrings,
header: config.header,
includeEmptyRows: config.includeEmptyRows,
withBOM: config.withBom
Expand Down
77 changes: 77 additions & 0 deletions docs/cli-examples.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# CLI examples

All examples use this example [input file](https://github.com/zemirco/json2csv/blob/master/test/fixtures/json/default.json).

## Input file and specify fields

```sh
$ json2csv -i input.json -f carModel,price,color
carModel,price,color
"Audi",10000,"blue"
"BMW",15000,"red"
"Mercedes",20000,"yellow"
"Porsche",30000,"green"
```

## Input file, specify fields and use pretty logging

```sh
$ json2csv -i input.json -f carModel,price,color -p
```

![Screenshot](https://s3.amazonaws.com/zeMirco/github/json2csv/json2csv-pretty.png)

## Generating CSV containing only specific fields

```sh
$ json2csv -i input.json -f carModel,price,color -o out.csv
$ cat out.csv
carModel,price,color
"Audi",10000,"blue"
"BMW",15000,"red"
"Mercedes",20000,"yellow"
"Porsche",30000,"green"
```

Same result will be obtained passing the fields config as a file.

```sh
$ json2csv -i input.json -c fieldsConfig.json -o out.csv
```

where the file `fieldsConfig.json` contains

```json
[
"carModel",
"price",
"color"
]
```

## Read input from stdin

```sh
$ json2csv -f price
[{"price":1000},{"price":2000}]
```

Hit <kbd>Enter</kbd> and afterwards <kbd>CTRL</kbd> + <kbd>D</kbd> to end reading from stdin. The terminal should show

```sh
price
1000
2000
```

## Appending to existing CSV

Sometimes you want to add some additional rows with the same columns.
This is how you can do that.

```sh
# Initial creation of csv with headings
$ json2csv -i test.json -f name,version > test.csv
# Append additional rows
$ json2csv -i test.json -f name,version --no-header >> test.csv
```
Loading

0 comments on commit 88ed6ee

Please sign in to comment.