JQ Cheat Sheet

JQ is a lightweight and flexible command-line JSON processor. This is a cheatsheet of commands and function that I’ve found useful for quick reference. You can get full JQ Cheat Sheet Here .

Common usages

Here are some common ways jq is utilized.

Piping from curl

# get the Astronomy Picture of the Day (APOD)
curl -s https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY | jq
(Note that piping to jq with no jq script will just format and colorize the JSON. Nice!)

From a JSON file

Just pass the file path after the jq script.

jq '.name' package.json

In a chain of pipes

You’ll probably want to use the -r (raw) command if you’re using it in a pipeline or saving the output to a variable. -r gets rid of formatting like quotes and spaces for single values. For objects, it outputs valid JSON so it will have quotes.

# this downloads the latest APOD and saves to a file
url="https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY"
curl -o apod.png "$(curl -s $url | jq -r '.hdurl')"

Common selectors

Get a named property

echo '{"id": 1, "name": "Cam"}' | jq '.id'``
# 1
echo '{"nested": {"a": {"b": 42}}}' | jq '.nested.a.b'
# 42

Get an array element by index

echo '[0, 1, 1, 2, 3, 5, 8]' | jq '.[3]'
# 3

Get an array element’s property

echo '[{"id": 1, "name": "Mario"}, {"id": 2, "name": "Luigi"}]' | jq '.[1].name'
# Luigi

Slice an array

Slices an array on by index.

echo '["a", "b", "c", "d"]' | jq '.[1:3]'
# ["b", "c"]

Either the first or last index can be omitted to go from the begining or end.

echo '["a", "b", "c", "d"]' | jq '.[1:]'
# ["b", "c", "d"]

Creating a new object

The syntax looks like this: { myPropertyName: .propertyFromJSON }

echo '{ "a": 1, "b": 2 }' | jq '{ a: .b, b: .a }'
# { "a": 2, "b": 1 }

22