Как извлечь значение конкретного поля из json, используя jq, передав ключ ввода - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть JSON ниже, и я хотел бы получить значение ip, если значение имени совпадает с переданным входным значением.

т.е. передать вход как abc.com и вернуть значение как 101.0.0.0.Как я могу добиться этого с помощью jq?

[  
  {  
     "ips":[  
        {  
           "name":"google.com",
           "value":"172.217.164.110"
        }
     ]
   },
   {
     "ips":[  
        {  
           "name":"abc.com",
           "value":"101.0.0.0"
        }
      ]
    }
]

Я хочу получить значение поля, только если значение, переданное извне, сопоставляется с другим полем в том же массиве.

т.е. когда я передаю ключ как abc.com, который должен вернуть значение 101.0.0.0

1 Ответ

0 голосов
/ 28 декабря 2018

С вашим вводом, вызов:

jq -r --arg name abc.com '.[][][] | select(.name == $name).value'

производит:

101.0.0.0

Вы также можете рассмотреть альтернативы, такие как:

jq -r --arg name abc.com '.. | objects | select(.ips) | .ips[] | select(.name == $name).value'

или, предостерегая от ветра:

jq -r --arg name abc.com '.. | objects | select(.name == $name).value'
...