2017-09-26 3 views
0

dans [] il y a beaucoup de blocs ci-dessous, comment extraire .title et "valeur" de .eye.four.watcher1 []. Name == "cat" pour les blocs ayant "groupe": "A"?jq obtenir plusieurs valeurs de différents [] à la fois avec jq

Ce que j'ai essayé est déjà:

$ JQ. | sélectionnez (.group == "A") | .title + » « + .eye.four.watcher1 []. nom » test.json

"chien ProfileXXX"

"chat ProfileXXX"

"souris ProfileXXX"

mais comment imprimer seulement le titre et la valeur du "chat" des blocs avec "groupe": "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": "..." 
     } 
     ] 
    } 
    } 
} 

Répondre

2

solution JQ:

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

La sortie:

ProfileXXX bbbb 
2

Voici une solution qui utilise variable binding et string interpolation:

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

Avec ce filtre filter.jq et les données d'échantillon dans test.json

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

produit

ProfileXXX bbbb 

Try it online!