如何通过传递输入键使用jq从json中提取特定字段值

时间:2018-12-28 19:18:36

标签: json select jq

我具有以下JSON,如果名称值与传递的输入值匹配,我想获取ip值。

i.e将输入作为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 :(得分:0)

根据您的输入,调用:

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'