jq - select objects with given key name

前端 未结 3 641
渐次进展
渐次进展 2021-02-01 22:38

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

相关标签:
3条回答
  • 2021-02-01 23:17

    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'
    
    0 讨论(0)
  • 2021-02-01 23:23

    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'
    
    0 讨论(0)
  • 2021-02-01 23:30

    Not tested: how about jq 'recurse(.[]?) | objects | has("updateDate")' ?

    0 讨论(0)
提交回复
热议问题