2017-09-26 61 views
0

in []下面有很多块,如何提取.eye.four.watcher1 []的.title和“value”。name ==“cat”对于有“组”的块:“A”?jq一次可以从不同的[]中获得多个值,jq

我已经试过的是:

$ jq'。 |选择(.group ==“A”)| .title伪+”“+ .eye.four.watcher1 []名” test.json

“ProfileXXX狗”

“ProfileXXX猫”

“ProfileXXX鼠标”

但如何仅打印带有“group”的块的“猫”的titte和value:“A”,?

{ 
    "title": "ProfileXXX", 
    "pagelen": 10, 
    "group": "A", 
    "size": 1, 
    "eye": { 
    "one": "git", 
    "two": false, 
    "three": "...", 
    "four": { 
     "watcher1": [ 
     { 
      "name": "dog", 
      "value": "aaaa" 
     }, 
     { 
      "name": "cat", 
      "value": "bbbb" 
     }, 
     { 
      "name": "mouse", 
      "value": "cccc" 
     } 
     ], 
     "watcher2": { 
     "type": "B", 
     "href": "2..." 
     }, 
     "watcher3": { 
     "type": "C", 
     "href": "3..." 
     }, 
     "values": [ 
     { 
      "five": "git", 
      "six": false, 
      "seven": "...", 
      "eight": { 
      "watchers": { 
       "href": "..." 
      }, 
      "forks": { 
       "href": "..." 
      }, 
      "clone": [ 
       { 
       "href": "...", 
       "name": "https" 
       }, 
       { 
       "href": "...", 
       "name": "ssh" 
       } 
      ], 
      "pullrequests": { 
       "href": "..." 
      } 
      }, 
      "fourteen": false, 
      "fiveteen": { 
      "username": "...", 
      "display_name": "...", 
      "uuid": "...", 
      "links": { 
       "self": { 
       "href": "..." 
       }, 
       "html": { 
       "href": "..." 
       }, 
       "avatar": { 
       "href": "..." 
       } 
      } 
      }, 
      "updated_on": "...", 
      "size": 2328936, 
      "is_private": true, 
      "uuid": "..." 
     } 
     ] 
    } 
    } 
} 

回答

2

JQ溶液:

jq -r '.[] | select(.group=="A") | .title +" "+ (.eye.four.watcher1[] | select(.name=="cat")).value' test.json 

输出:

ProfileXXX bbbb 
2

下面是一个使用一个溶液variable bindingstring interpolation

 select(.group == "A") 
    | .title as $t 
    | .eye.four.watcher1[] 
    | select(.name == "cat") 
    | "\($t) \(.value)" 

通过该过滤器在filter.jq和样本数据中test.json

$ jq -Mr -f filter.jq test.json 

产生

ProfileXXX bbbb 

Try it online!