I\'ve got an arbitrary structure with many levels, etc. I need to select all objects that contain a key named updateDate
. How do I do that with jq? I came up with o
The accepted answer also produces null
for every object that doesn't have the key.
What worked for me was:
jq '..|objects|.updateDate//empty'
The .updateDate//empty
part means: if .updateDate
is null
(or false
), skip it entirely.
This of course wouldn't work if you expect your key to have values of false
or null
. In that case, use this:
jq '..|objects|select(has("updateDate"))|.updateDate'
In 1.4 you can just:
jq '..|.updateDate?'
If you're stuck with 1.3 you can use a longer program like so:
jq 'recurse(if type == "array" or type = "object" then .[] else empty end) | if type == "object" then .updateDate else empty end'
Not tested: how about jq 'recurse(.[]?) | objects | has("updateDate")'
?