skip to Main Content

I try to retrieve 1 in :

$ cat object.json 
{
    "apiVersion": "apps/v1",
    "kind": "Deployment",
    "metadata": {
        "annotations": {
            "deployment.kubernetes.io/revision": "1"
        }
    }
}
$ xidel -e '($json).metadata.annotations["deployment.kubernetes.io/revision"]' -s object.json 
{
  "deployment.kubernetes.io/revision": "1"
}

Tried

'($json).metadata.annotations."deployment.kubernetes.io/revision"'
'($json).metadata.annotations.("deployment.kubernetes.io/revision")'
'($json).metadata.annotations.(deployment.kubernetes.io/revision)'

2

Answers


  1. Chosen as BEST ANSWER

    I've found:

    $ xidel -e '($json).metadata.annotations(["deployment.kubernetes.io/revision"])' -s object.json
    1
    

    Is it a correct way to do it?


  2. I hardly ever use the dot-notation, because as far as I know in terms of capabilities it’s rather limited.

    JSONiq notation:

    -e '$json("metadata")("annotations")("deployment.kubernetes.io/revision")'
    

    Xpath-like notation with the XPath 3.1 map:get() function:

    -e '$json/metadata/annotations/map:get(.,"deployment.kubernetes.io/revision")'
    

    XPath 3.1 "?" lookup operator:

    -e '$json?metadata?annotations?"deployment.kubernetes.io/revision"'
    

    A combination of all notations:

    -e '$json("metadata")/annotations?"deployment.kubernetes.io/revision"'
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search