JSON Parsing in Bash
About a month ago, I needed to parse JSON from in Bash scripts.
This was an interesting problem/challenge, enter ./jq.
jq is a sed like tool for JSON data, that can be used to parse JSON, from the command line, and from within Bash scripts.
jq is written in C, and is a single binary, that has zero runtime dependencies, meaning that you can simply download the binary and get parsing!
Some simple examples:
Lets say we have the following JSON payload:
sample.json:
[
{
"rank": 1,
"description": "Great Search Engine",
"url": "https://google.com"
},
{
"rank": 2,
"description": "Oldie but goodie",
"url": "https://www.yahoo.com"
}
]
If we wanted to print out the JSON payload in a colorized output, we could do:
cat sample.json | jq
The output would be:
Lets say we wanted just the URLs:
cat sample.json | jq .[].url
The output would be:
If we wanted just the first URL:
cat sample.json | jq .[0].url
This would ouput:
The URLs followed by the Ranks:
cat sample.json | jq '.[] | .url,.rank'
This would output:
Lets do something a little more complex, lets say we want to add 1 to every rank:
cat sample.json | jq '.[].rank +1'
This would output:
The above are just simple examples, jq is very powerful, and can do much more!
I recommend checking out the jq/ github page to get more information on this great tool.