首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用jq从多个嵌套数组中提取密钥

如何使用jq从多个嵌套数组中提取密钥
EN

Stack Overflow用户
提问于 2015-06-02 16:13:31
回答 2查看 18.2K关注 0票数 15

设置

我试图弄清楚jq过滤器是如何工作的,并且找出嵌套数组有困难。使用下面的数据,我无法使一个平面5键输出。我可以得到1键和4空,或4键和1空,但不是所有的5个键。

1支钥匙,4支明渠:

代码语言:javascript
复制
.Reservations[] | {OwnerId, InstanceId, ImageId, PrivateIpAddress, Platform}

返回:

代码语言:javascript
复制
{
 "OwnerId": "000000000000",
 "InstanceId": null,
 "ImageId": null,
 "PrivateIpAddress": null,
 "Platform": null
}

4个键,1个null:

代码语言:javascript
复制
.Reservations[].Instances[] | {OwnerId, InstanceId, ImageId, PrivateIpAddress, Platform}

{
  "OwnerId": null,
  "InstanceId": "i-v33333333",
  "ImageId": "ami-44444444",
  "PrivateIpAddress": "10.0.0.0",
  "Platform": "windows"
}

由于各种原因,我无法在AWS CLI中使用"--query“选项,该选项确实返回了我要寻找的格式:

代码语言:javascript
复制
aws ec2 describe-instances --region us-east-1 --profile temp --query 'Reservations[*].{InstanceId:Instances[0].InstanceId,IP:Instances[0].PrivateIpAddress,Platform:Instances[0].Platform,OwnerId:OwnerId}'

输出:

代码语言:javascript
复制
[
    {
        "InstanceId": "i-11111111",
        "IP": "10.9.9.3",
        "OwnerId": "111111111111",
        "Platform": windows
    },
    {
        "InstanceId": "i-22222222",
        "IP": "10.0.0.0",
        "OwnerId": "111111111111",
        "Platform": windows
    }
]

以下是JSON输入:

代码语言:javascript
复制
   {
    "Reservations": [
        {
            "OwnerId": "000000000000",
            "ReservationId": "r-22222222",
            "Groups": [],
            "RequesterId": "111111111111",
            "Instances": [
                {
                    "Monitoring": {
                        "State": "enabled"
                    },
                    "PublicDnsName": null,
                    "State": {
                        "Code": 16,
                        "Name": "running"
                    },
                    "EbsOptimized": false,
                    "LaunchTime": "2015-04-10T00:02:02.000Z",
                    "Platform": "windows",
                    "PrivateIpAddress": "10.0.0.0",
                    "ProductCodes": [
                        {
                            "ProductCodeId": "0000000000000000000000000",
                            "ProductCodeType": "marketplace"
                        }
                    ],
                    "VpcId": "vpc-2222222",
                    "StateTransitionReason": null,
                    "InstanceId": "i-v33333333",
                    "ImageId": "ami-44444444",
                    "PrivateDnsName": "ip-10-0-0-0.aws.foobarcloud.com",
                    "KeyName": "bar-servicemesh",
                    "SecurityGroups": [
                        {
                            "GroupName": "bar-wildcard-dns-intranet-InstanceSecurityGroup-VN0DFQ13QCDY",
                            "GroupId": "sg-55555555"
                        }
                    ],
                    "ClientToken": "11111111-2222-3333-4444-555555555555_subnet-66666666_1",
                    "SubnetId": "subnet-66666666",
                    "InstanceType": "t2.medium",
                    "NetworkInterfaces": [
                        {
                            "Status": "in-use",
                            "MacAddress": "00:00:00:00:00:77",
                            "SourceDestCheck": true,
                            "VpcId": "vpc-66666666",
                            "Description": null,
                            "NetworkInterfaceId": "eni-11111111"
                        }
                    ]
                }
            ]
        }
    ]
}

问题使用上面的JSON输入,如何使用jq生成以下输出:

代码语言:javascript
复制
{
  "OwnerId": "000000000000",
  "InstanceId": "i-v33333333",
  "ImageId": "ami-44444444",
  "PrivateIpAddress": "10.0.0.0",
  "Platform": "windows"
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-02 17:37:04

可以使用变量存储OwnerID,如下所示:

代码语言:javascript
复制
.Reservations[] | .OwnerId as $OwnerId | ( .Instances[] | { "OwnerId": $OwnerId, InstanceId, ImageId, PrivateIpAddress, Platform} )
票数 26
EN

Stack Overflow用户

发布于 2022-04-07 01:27:13

这很好,但是如果您也想获得ProductCodeId呢?让它看起来像

代码语言:javascript
复制
{
  "OwnerId": "000000000000",
  "InstanceId": "i-v33333333",
  "ImageId": "ami-44444444",
  "PrivateIpAddress": "10.0.0.0",
  "Platform": "windows",
  "ProductCodeId": "0000000000000000000000000"
}
``` ?
代码语言:javascript
复制
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30601278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档