If you’re not familiar with the tool yet, I’d like to introduce you to jq: a lightweight and flexible command-line JSON processor.
The jq
tool us super useful to query JSON data at the command line of a Linux (or Mac OSX) machine as a sysadmin.
Installation
Depending on your OS, it’s going to be:
# CentOS, Red Hat $ yum install jq # Debian, Ubuntu $ apt-get install jq # Mac with Homebrew $ brew install jq
Usage
I’ll be showing you a quick usage with ElasticSearch. It’s a service that has, for this demo, a very simple HTTP call you can make that returns a JSON response.
Here’s the raw data:
$ curl -s -XGET 'http://localhost:9200/_cluster/health?pretty=true' { "cluster_name" : "your_cluster_name", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 10, "active_shards" : 10, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 10 }
We get a nicely formatted JSON reply. Sure, you can grep
, sed
and awk
this output and get the values you want, but there’s a cleaner solution out there, called jq
. Whether it’s simpeler depends entirely on you and what you’re more comfortable with.
If I want the output of the “status” key and want to see its value, I can do this with jq
:
$ curl -s -XGET 'http://localhost:9200/_cluster/health?pretty=true' | jq -s .[0].status "yellow"
Let’s break it down a bit:
jq
: the binary you just installed-s
: read the input stream (the curl before the pipe) and process it as a whole.[0].status
: process the entire response (.
), take the first element from the JSON array (.0
) and give me the status key (.status
)
This example just touches the basics of jq
, if you want to parse more complex JSON values and do some calculations or output manipulations, check out the `jq` manual and documentations.