如何只用键和值输出正确的结果?

时间:2018-10-11 07:28:13

标签: json bash jq

我有一个json,如下所示:

[
    {
      "AvailabilityZone": "ap-northeast-1a",
      "Tags": [
        {
          "Value": "value1",
          "Key": "key1"
        },
        {
          "Value": "value2",
          "Key": "key2"
        }
      ],
    },
    {
          "AvailabilityZone": "ap-northeast-1a",
          "Tags": [
            {
              "Value": "value3",
              "Key": "key3"
            },
            {
              "Value": "value4",
              "Key": "key4"
            }
          ],
        },
]

当我从键盘输入键和值时。我只想通过jq选项使用键和值输出正确的结果。

示例:我输入Key:value为key3:value3。我的愿望:

{
      "AvailabilityZone": "ap-northeast-1a",
      "Tags": [
        {
          "Value": "value3",
          "Key": "key3"
        },
        {
          "Value": "value4",
          "Key": "key4"
        }
      ],
}

2 个答案:

答案 0 :(得分:1)

似乎您正在使用aws cli来获取ebs卷详细信息,可以使用aws cli的filter属性来过滤查询结果。
您可以在这里使用以下内容:
aws ec2 describe-volumes --filters Name=tag-key,Values="key3" Name=tag-value,Values="value3"

在以下位置找到更多帮助:
aws ec2 describe-volumes help

我认为这比使用jq过滤要容易。

答案 1 :(得分:1)

使用select过滤标签下的数组:

jq '.[].Tags | select((.[].Key == "key3") and (.[].Value="value3"))  ' < file.json

从标准输入中读取键和值:

echo key3 value3 | (
    read key value
    k=$key v=$value jq ".[].Tags
        | select((.[].Key == env.k) and (.[].Value=env.v))
    " < file.json)