小编Tim*_*ith的帖子

使用jq通过搜索子键/值对来选择父项

使用jq,如果父对象包含满足两个过滤器要求的子对象,如何选择它?

在这个例子中,我想选择所有子网元素,这些元素的子标记键为"Name",值为"TheName".我的例子有两个子网.第一个在错误的密钥中有"TheName".第二个子网具有我要查找的名称/值对.即"Key": "Name", "Value": "TheName"

以下选项在其中一个标签中选择具有指定值的子网,但不选择该对.它返回两个子网而不是仅返回第二个子网.

jq '.Subnets[] | select(.Tags[].Value=="TheName")' output
Run Code Online (Sandbox Code Playgroud)

如何使用jq仅选择具有我要查找的名称/值对的子网?

{
    "Subnets": [
        {
            "VpcId": "vpc-12345678",
            "SubnetId": "subnet-1234567a",
            "Tags": [
                {
                    "Key": "IgnoreThis",
                    "Value": "TheName"
                },
                {
                    "Key": "Name",
                    "Value": "NotTheName"
                }
            ]
        },
        {
            "VpcId": "vpc-12345678",
            "SubnetId": "subnet-1234567b",
            "Tags": [
                {
                    "Key": "IgnoreThis",
                    "Value": "ignore"
                },
                {
                    "Key": "Name",
                    "Value": "TheName"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

期望的输出是:

{
    "VpcId": "vpc-12345678",
    "SubnetId": "subnet-1234567b",
    "Tags": [
        {
            "Key": "IgnoreThis",
            "Value": "ignore"
        },
        {
            "Key": "Name",
            "Value": …
Run Code Online (Sandbox Code Playgroud)

bash select json jq

9
推荐指数
1
解决办法
2476
查看次数

标签 统计

bash ×1

jq ×1

json ×1

select ×1