首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jq筛选出元素的特定json数组字段。

使用jq筛选出元素的特定json数组字段。
EN

Stack Overflow用户
提问于 2021-07-07 08:27:14
回答 2查看 138关注 0票数 0

我运行了一个aws rds describe-instances,得到了一个实例的json数组,大致如下所示:

代码语言:javascript
复制
"DBInstances": [
        {
            "DBInstanceIdentifier": "my-rds",
            "Endpoint": {
                "HostedZoneId": "XXXXXXXXXXXX"
            },
            "DBSecurityGroups": [],
            "VpcSecurityGroups": [
                {
                    "VpcSecurityGroupId": "sg-12345",
                    "Status": "active"
                },
                {
                    "VpcSecurityGroupId": "sg-12345",
                    "Status": "active"
                }
            ],
            "DBParameterGroups": [
                {
                    "DBParameterGroupName": "postgres-12",
                    "ParameterApplyStatus": "in-sync"
                }
            ],
            "AvailabilityZone": "us-west-1c",
            "DBSubnetGroup": {
                "VpcId": "vpc-123456",
                "SubnetGroupStatus": "Complete",
                "Subnets": [
                    {
                        "SubnetIdentifier": "subnet-123456",
                        "SubnetAvailabilityZone": {
                            "Name": "us-west-1b"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    },
                    {
                        "SubnetIdentifier": "subnet-12345",
                        "SubnetAvailabilityZone": {
                            "Name": "us-west-1c"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    },
                    {
                        "SubnetIdentifier": "subnet-12345",
                        "SubnetAvailabilityZone": {
                            "Name": "us-west-1e"
                        },
                        "SubnetOutpost": {},
                        "SubnetStatus": "Active"
                    }
                ]
            },
            "EngineVersion": "11.9",
            "AutoMinorVersionUpgrade": true,
            "ReadReplicaDBInstanceIdentifiers": [],
            "LicenseModel": "foobar",
            "OptionGroupMemberships": [
                {
                    "OptionGroupName": "randomname",
                    "Status": "in-sync"
                }
            ],
        },
    }

输出明显截断。

有没有一种使用(可能是jq)的方法?印刷:

( a) DBInstances数组的所有元素

对于每个元素,只打印

( b) DBInstanceIdentifierEngineVersion

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-07-07 11:52:11

您可以使用以下JQ过滤器:

代码语言:javascript
复制
.DBInstances[] | [ .DBInstanceIdentifier, .EngineVersion ]

哪里

  • .DBInstances[]遍历DBInstances数组
  • [ .DBInstanceIdentifier, .EngineVersion ]创建一个只包含DBInstanceIdentifierEngineVersion键的数组。
代码语言:javascript
复制
jq '.DBInstances[] | [ .DBInstanceIdentifier, .EngineVersion ]'

JqPlay演示

对于当前的JSON示例( DBInstances数组中只有1项),结果是:

代码语言:javascript
复制
[
  "my-rds",
  "11.9"
]
票数 1
EN

Stack Overflow用户

发布于 2021-07-07 09:27:00

不是用.jq解决的,而是使用aws cli特性解决的:

代码语言:javascript
复制
aws rds describe-db-instances --query 'DBInstances[*].[DBInstanceIdentifier, EngineVersion]' 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68282553

复制
相关文章

相似问题

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