I have the following JSON:
{
"a_key": "A",
"key_to_filter": "B",
"c_key": "C"
}
I want to get all the keys using jq as a compressed response (using jq -c "keys").
How can I get all the keys of this JSON without the key "key_to_filter"?
In other words, I need ["a_key", "c_key"]
>Solution :
You could just subtract that one from the array of keys:
jq -c 'keys - ["key_to_filter"]'
More verbosely but also more efficiently (if it matters), you could use a map to select what you want:
jq -c 'keys | map(select(. != "key_to_filter"))'
As @artild pointed out in a comment, you could also first delete the item in question, and just then get all keys:
jq -c 'del(.key_to_filter) | keys'
Output:
["a_key","c_key"]
Note that keys returns a sorted array. If you want them unsorted, use keys_unsorted instead.