代码之家  ›  专栏  ›  技术社区  ›  Itai Ganot

尝试使用jq从aws cli响应中提取值,但失败了,我做错了什么?

  •  0
  • Itai Ganot  · 技术社区  · 7 年前

    我有以下json结构:

    [
      {
        "IsDefault": false,
        "CidrBlock": "172.19.0.0/16",
        "DhcpOptionsId": "dopt-37fd70550",
        "State": "available",
        "CidrBlockAssociationSet": [
          {
            "CidrBlockState": {
              "State": "associated"
            },
            "CidrBlock": "172.19.0.0/16",
            "AssociationId": "vpc-cidr-assoc-f3c1559a"
          }
        ],
        "Tags": [
          {
            "Key": "Name",
            "Value": "product-Production"
          }
        ],
        "InstanceTenancy": "default",
        "VpcId": "vpc-1f0e197d"
      },
      {
        "IsDefault": false,
        "CidrBlock": "10.0.0.0/16",
        "DhcpOptionsId": "dopt-0a550861",
        "State": "available",
        "CidrBlockAssociationSet": [
          {
            "CidrBlockState": {
              "State": "associated"
            },
            "CidrBlock": "10.0.0.0/16",
            "AssociationId": "vpc-cidr-assoc-8955dae0"
          }
        ],
        "Tags": [
          {
            "Key": "Name",
            "Value": "Marketing VPC"
          }
        ],
        "InstanceTenancy": "default",
        "VpcId": "vpc-36b5585d"
      },
      .
      .
      .
    ]
    

    我试着用jq打印所有VpcId,但找不到正确的方法。

    我试过的是:

    command | jq -r '.VpcId[]'
    command | jq -r '.VpcId'
    command | jq -r '.[] | .VpcId'
    

    我做错什么了?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Mike Patrick    7 年前

    看起来你使用的命令是 aws ec2 describe-vpcs .

    此命令实际上返回以下结构:

    {
        "Vpcs": [
            {
                "VpcId": "vpc-xxxxxxxx", 
            }
        ]
    }
    

    所以你想进入 Vpcs 在遍历数组之前键入,如下所示:

    aws ec2 describe-vpcs | jq -r '.Vpcs | .[] | .VpcId'
    
        2
  •  0
  •   peak    7 年前

    另一种考虑是 .. ,例如。

    .. | .VpcId? // empty
    

    将打印所有“VpcId”键的值,除了 null false 价值观。

    顺便说一下, .Vpcs | .[] | .VpcId 可以缩写为 .Vpcs[].VpcId