How to get key names from JSON using jq

前端 未结 7 995
[愿得一人]
[愿得一人] 2020-11-29 22:15

curl http://testhost.test.com:8080/application/app/version | jq \'.version\' | jq \'.[]\'

The above command outputs only the values as below:

         


        
相关标签:
7条回答
  • 2020-11-29 22:16

    echo '{"ab": 1, "cd": 2}' | jq -r 'keys[]' prints all keys one key per line without quotes.

    ab
    cd
    
    0 讨论(0)
  • 2020-11-29 22:19

    To print keys on one line as csv:

    echo '{"b":"2","a":"1"}' | jq -r 'keys | [ .[] | tostring ] | @csv'
    

    Output:

    "a","b"
    

    For csv completeness ... to print values on one line as csv:

    echo '{"b":"2","a":"1"}' | jq -rS . | jq -r '. | [ .[] | tostring ] | @csv'
    

    Output:

    "1","2"
    
    0 讨论(0)
  • 2020-11-29 22:22

    You can use:

    $ jq 'keys' file.json
    
    $ cat file.json:
    { "Archiver-Version" : "Plexus Archiver", "Build-Id" : "", "Build-Jdk" : "1.7.0_07", "Build-Number" : "", "Build-Tag" : "", "Built-By" : "cporter", "Created-By" : "Apache Maven", "Implementation-Title" : "northstar", "Implementation-Vendor-Id" : "com.test.testPack", "Implementation-Version" : "testBox", "Manifest-Version" : "1.0", "appname" : "testApp", "build-date" : "02-03-2014-13:41", "version" : "testBox" }
    
    $ jq 'keys' file.json
    [
      "Archiver-Version",
      "Build-Id",
      "Build-Jdk",
      "Build-Number",
      "Build-Tag",
      "Built-By",
      "Created-By",
      "Implementation-Title",
      "Implementation-Vendor-Id",
      "Implementation-Version",
      "Manifest-Version",
      "appname",
      "build-date",
      "version"
    ]
    

    UPDATE: To create a BASH array using these keys:

    Using BASH 4+:

    mapfile -t arr < <(jq -r 'keys[]' ms.json)
    

    On older BASH you can do:

    arr=()
    while IFS='' read -r line; do
       arr+=("$line")
    done < <(jq 'keys[]' ms.json)
    

    Then print it:

    printf "%s\n" ${arr[@]}
    
    "Archiver-Version"
    "Build-Id"
    "Build-Jdk"
    "Build-Number"
    "Build-Tag"
    "Built-By"
    "Created-By"
    "Implementation-Title"
    "Implementation-Vendor-Id"
    "Implementation-Version"
    "Manifest-Version"
    "appname"
    "build-date"
    "version"
    
    0 讨论(0)
  • 2020-11-29 22:28

    You need to use jq 'keys[]'. For example:

    echo '{"example1" : 1, "example2" : 2, "example3" : 3}' | jq 'keys[]'
    

    Will output a line separated list:

    "example1"
    "example2"
    "example3"
    
    0 讨论(0)
  • 2020-11-29 22:31

    Here's another way of getting a Bash array with the example JSON given by @anubhava in his answer:

    arr=($(jq --raw-output 'keys_unsorted | @sh' file.json))
    
    echo ${arr[0]}    # 'Archiver-Version'
    echo ${arr[1]}    # 'Build-Id'
    echo ${arr[2]}    # 'Build-Jdk'
    
    0 讨论(0)
  • 2020-11-29 22:33

    In combination with the above answer, you want to ask jq for raw output, so your last filter should be eg.:

         cat input.json | jq -r 'keys'
    

    From jq help:

         -r     output raw strings, not JSON texts;
    
    0 讨论(0)
提交回复
热议问题