Json -> CSV conversion utility
json2csv is able to convert arbitrary newline-delimited JSON (.ndjson) into a valid CSV. Currently, json2csv supports newline-delimited JSON only.
You need to install Stack
then just execute stack build
json2csv in.ndjson out.csv +RTS -N
JSON input:
{"a": [{"b": "b1", "c": [1, 2]},{"b": "b2", "c": [3, 4]}], "d": [10, 20]}
CSV output:
a.$.b | a.$.c.$ | d.$ |
---|---|---|
b1 | 1.0 | 10.0 |
b1 | 1.0 | 20.0 |
b1 | 2.0 | 10.0 |
b1 | 2.0 | 20.0 |
b2 | 3.0 | 10.0 |
b2 | 3.0 | 20.0 |
b2 | 4.0 | 10.0 |
b2 | 4.0 | 20.0 |
JSON input:
{"a": "field a0","b": [{"value": "field b2"}, {"value": "field b xxx"}],"c": [{"value": "field c0"}, {"value": "field c xxx"}]}
{"a": "field a1","b": [{"value": "field b1"}],"c": [{"value": "field c1"}]}
{"a": "field a2","b": [{"value": "field b2"}, {"value": "field b xxx"}],"c": {"value": "field c2"}, "d": 42}
CSV output:
a | b.$.value | c.$.value | d | c.value |
---|---|---|---|---|
field a0 | field b2 | field c0 | ||
field a0 | field b2 | field c xxx | ||
field a0 | field b xxx | field c0 | ||
field a0 | field b xxx | field c xxx | ||
field a1 | field b1 | field c1 | ||
field a2 | field b2 | 42.0 | field c2 | |
field a2 | field b xxx | 42.0 | field c2 |
If You don't need to know, which values came from arrays, You can use -f
(--flatten
)
For the same JSON input it will give the following output:
c.value | a | d | b.value |
---|---|---|---|
field c0 | field a0 | field b2 | |
field c0 | field a0 | field b xxx | |
field c xxx | field a0 | field b2 | |
field c xxx | field a0 | field b xxx | |
field c1 | field a1 | field b1 | |
field c2 | field a2 | 42.0 | field b2 |
field c2 | field a2 | 42.0 | field b xxx |
You can extract only common fields from all lines with -i
(--intersect
)
For the same JSON input it will give the following output:
a | b.$.value |
---|---|
field a0 | field b2 |
field a0 | field b xxx |
field a1 | field b1 |
field a2 | field b2 |
field a2 | field b xxx |