jsontsv
Transforms JSON objects into delimiter-separated line-oriented output, which is
more convenient for downstream processing with Unix tools like grep
, awk
,
diff
, etc. Also useful for converting JSON data into spreadsheet data. CSV-style
output is also supported.
Synopsis
input:
{
"title": "Terminator 2: Judgment Day",
"year": 1991,
"stars": [
{
"name": "Arnold Schwarzenegger"
},
{
"name": "Linda Hamilton"
}
],
"ratings": {
"imdb": 8.5
}
}
{
"title": "Interstellar",
"year": 2014,
"stars": [
{
"name": "Matthew McConaughey"
},
{
"name": "Anne Hathaway"
}
],
"ratings": {
"imdb": 8.9
}
}
Note that this input is not actually JSON at the top-level. It is a stream of
JSON objects. It can be fed into jsontsv
:
jsontsv 'title year stars.name ratings.imdb' < input
outputs this tab-separated text:
Terminator 2: Judgment Day 1991 Arnold Schwarzenegger,Linda Hamilton 8.5
Interstellar 2014 Matthew McConaughey,Anne Hathaway 8.9
You can pick off array elements using [i]
syntax:
jsontsv 'title year stars[0].name' < input
outputs
Terminator 2: Judgment Day 1991 Arnold Schwarzenegger
Interstellar 2014 Matthew McConaughey
Installation
Assuming you have a recent version of the Haskell
platform on your system,
cabal update
cabal install jsontsv
Make sure the installed executable is on your PATH.
Usage
jsontsv
Usage: jsontsv FIELDS [-a STRING] ([-c|--csv] | [-d STRING]) [-H]
Transform JSON objects to TSV
Available options:
-h,--help Show this help text
-a STRING Concatentated array elem delimiter. Defaults to comma.
-c,--csv Output CSV
-d STRING Output field delimiter. Defaults to tab.
-H Include headers
Input should be a stream of JSON objects of the same or mostly similar shape,
separated by whitespace such as newlines. If the objects are wrapped in a JSON
array at the top level or nested inside a top-level object, use the jq
tool by Stephan Dolan to extract an object stream, e.g.:
curl -s "https://api.github.com/users/danchoi/repos?sort=created&direction=desc" \
| jq '.[]' | jsontsv 'id name stargazers_count open_issues_count'
outputs
27397673 jsontsv 0 0
26033118 ngrender 24 1
25832026 rdoc 0 0
24756523 treehtml 0 0
24022588 heistexamples 0 0
24022042 hxtexamples 0 0
24005242 jdiff 0 0
23997156 https-types 0 0
22763562 podcasting 0 0
19294791 vimscript 3 0
JSON leaf values are printed as follows:
- Strings and numbers are copied to output.
- Boolean values are output as
t
or f
.
- null is printed as
null
- If the leaf value is an array, it is concatenated into a single
comma-separated string. This delimiter can be changed with the
-a
option.
Known alternatives
- jsawk Jsawk is like awk, but for JSON. (nodejs)
- jq
- jsoncsv a json to csv library in javascript/coffeescript
- json A free, in-browser JSON to CSV converter.