如果我提前知道相关标签的值,如何捕获VpcId?

时间:2018-08-06 08:35:32

标签: json jq json-query

我有aws ec2 describe-vpcs的以下输出:

{
    "Vpcs": [
        {
            "VpcId": "vpc-1f0e197d",
            "InstanceTenancy": "default",
            "Tags": [
                {
                    "Value": "Product-Production",
                    "Key": "Name"
                }
            ],
            "CidrBlockAssociationSet": [
                {
                    "AssociationId": "vpc-cidr-assoc-f3c5509a",
                    "CidrBlock": "172.19.0.0/16",
                    "CidrBlockState": {
                        "State": "associated"
                    }
                }
            ],
            "State": "available",
            "DhcpOptionsId": "dopt-37fd5550",
            "CidrBlock": "172.19.0.0/16",
            "IsDefault": false
        },
        {
         another vpc...
        }
    ]
}

如果

,我正在使用jq来捕获“ VpcId”
.Tags[].Value==Product-Production

但是无论我如何尝试,我都无法获得正确的语法,如何实现?

1 个答案:

答案 0 :(得分:1)

您太近了,但过滤器并不正确​​。您需要在此处使用select表达式来匹配与您的字符串条件匹配的对象,并从中筛选出值。

jq '.Vpcs[] | select( .Tags[].Value| contains("Product-Production")) | .VpcId'

如果您分解过滤条件,

  1. .Vpcs[]部分列出了我们要对其应用条件的数组中的所有元素。
  2. 我们过滤.Value中包含您在此处需要的字符串的对象。因此,在第一个管道输出的末尾,您可以从数组中的元素列表中获取实际元素,并与定义的条件匹配。
  3. 从返回的对象中,只需打印出.VpcId和最后一个管道即可。

如果您以前从未使用过jqplay.org,则应该尝试一下并使其生效,然后在线进行过滤。