jq

A command-line JSON processor that uses a domain-specific language.

TL;DR

# Execute a specific expression (print a colored and formatted json):
$ cat path/to/file.json | jq '.'

# Execute a specific script:
$ cat path/to/file.json | jq --from-file path/to/script.jq

# Pass specific arguments:
$ cat path/to/file.json | jq --arg "name1" "value1" --arg "name2" "value2" ... '. + $ARGS.named'

# Print specific keys:
$ cat path/to/file.json | jq '.key1, .key2, ...'

# Print specific array items:
$ cat path/to/file.json | jq '.[index1], .[index2], ...'

# Print all array items/object keys:
$ cat path/to/file.json | jq '.[]'

# Add/remove specific keys:
$ cat path/to/file.json | jq '. +|- {"key1": "value1", "key2": "value2", ...}'

Usage

Install

# install on macOS
$ brew install jq

Simple Usage

$ echo '{"id": 100, "info": { "name": "James Zhan"}}' | jq
$ echo '{"id": 100, "info": { "name": "James Zhan"}}' | jq .
$ echo '{"id": 100, "info": { "name": "James Zhan"}}' | jq -r '.id'
$ echo '{"id": 100, "info": { "name": "James Zhan"}}' | jq -r '.info'
$ echo '{"id": 100, "info": { "name": "James Zhan"}}' | jq -r '.info.name'