jsontsv-0.1.0.0: README.md
# jsontsv
A simple tool to transform JSON into tab-separated line-oriented output
amenable to downstream Unix text processing.
## Synopsis
input.json:
```json
{
"title": "Terminator 2: Judgement Day",
"year": 1991,
"stars": [
"Arnold Schwarzenegger",
"Linda Hamilton"
],
"ratings": {
"imdb": 8.5
}
}
{
"title": "Interstellar",
"year": 2014,
"stars": [
"Matthew McConaughey",
"Anne Hathaway"
],
"ratings": {
"imdb": 8.9
}
}
```
jsontsv 'title year stars ratings.imdb' < input.json
Outputs this tab-separated text:
```tsv
Terminator 2: Judgement Day 1991 Arnold Schwarzenegger,Linda Hamilton 8.5
Interstellar 2014 Matthew McConaughey,Anne Hathaway 8.9
```
## Setup
From the project directory,
cabal install
Make sure the installed executable is on your PATH.
## Usage
Input should be a stream of JSON objects with mostly uniform keys, separated by
whitespace such as newlines. If the objects are wrapped in a JSON array at the
top level, use the `jq` tool by Stephan Dolan to unwrap the objects, e.g.:
curl -s "https://api.github.com/users/danchoi/repos?type=owner&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 were copied to output.
* Boolean values are output as `t` or `f`.
* null is printed as `null`
* Arrays of leaf values are concatenated into a single comma-separated string
## Nested keys
jsontsv 'title duplicates.Rental.HD duplicates.Rental.SD' < input.json
## Using a file to designate columns:
jsontsv -f keys < input.json
## Concatenating fields, truncating fields, etc.
This should be done downstream using a tool like AWK.