Пытаясь извлечь значения из ответа aws-cli, используя jq, но не получилось, что я делаю не так?
У меня есть следующая структура 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"
},
.
.
.
]
Я пытаюсь распечатать все VpcId, используя jq, но я не могу найти правильный способ сделать это.
Вот что я попробовал:
command | jq -r '.VpcId[]'
command | jq -r '.VpcId'
command | jq -r '.[] | .VpcId'
Что я делаю неправильно?
2 ответа
Решение
Похоже, команда, которую вы используете aws ec2 describe-vpcs
,
Эта команда фактически возвращает следующую структуру:
{
"Vpcs": [
{
"VpcId": "vpc-xxxxxxxx",
}
]
}
Итак, вы хотите достичь в Vpcs
ключ, прежде чем перебирать массив, как это:
aws ec2 describe-vpcs | jq -r '.Vpcs | .[] | .VpcId'
Альтернативой для рассмотрения будет использование ..
например,
.. | .VpcId? // empty
выведет значения всех ключей "VpcId", кроме null
а также false
ценности.
Между прочим, .Vpcs | .[] | .VpcId
может быть сокращено до .Vpcs[].VpcId