back to TILs

Use jq to see if a JSON key exists

I’m constantly using jq to deal with JSON via the CLI.

Today I needed to figure out the difference between a key existing with a null value or not existing at all in a bit of JSON.

By default, “querying” a key via jq will return null whether the key exists and is null, or the key doesn’t exist:

# NOTE: the following is in fish, but should be straightforward to port to other shells

△ set json '{"test": null}'

△ echo $json | jq .test
null

△ echo $json | jq .nonexistent
null

Instead, you can use the jq’s has function to determine the difference:

△ echo $json | jq 'has("test")'
true

△ echo $json | jq 'has("nonexistent")'
false