使用嵌套值

时间:2017-04-13 16:17:57

标签: json aws-cli jq

我正在编写一些bash脚本来帮助自动管理AWS资源。我正在使用aws-clijq,到目前为止,情况非常好。

我使用自定义标记标记我的资源。在某些情况下,我希望根据自定义标记的KeyValue过滤资源列表。但是我在制定一个简洁的jq查询时遇到了麻烦。

因此,例如,如果我的ec2实例的(修剪过的)JSON输出如下:

[
    {
        "PublicIpAddress": "11.22.33.44",
        "PrivateIpAddress": "55.66.77.88",
        "Tags": [
            {
                "Value": "live199.blah.com",
                "Key": "Name"
            },
            {
                "Value": "live-standalone",
                "Key": "hc-class"
            }
        ]
    }
]
[
    {
        "PublicIpAddress": "111.222.333.444",
        "PrivateIpAddress": "555.666.777.888",
        "Tags": [
            {
                "Value": "staging99.blah.com",
                "Key": "Name"
            },
            {
                "Value": "staging-standalone",
                "Key": "hc-class"
            }
        ]
    }
]

...我需要找到Tags.Key == "hc-class"Tags.Value = "staging-standalone"的条目,如何使用jq以简洁的方式完成?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

对于给定的输入,以下过滤器产生输出,如下所示:

.[] | select(any(.Tags[]; .Key == "hc-class" and .Value == "staging-standalone"))

输出:

{
  "PublicIpAddress": "111.222.333.444",
  "PrivateIpAddress": "555.666.777.888",
  "Tags": [
    {
      "Value": "staging99.blah.com",
      "Key": "Name"
    },
    {
      "Value": "staging-standalone",
      "Key": "hc-class"
    }
  ]
}

答案 1 :(得分:0)

我对JQ很新,但我觉得我有一个解决方案:

https://jqplay.org/s/DljtxNX_72

select((.[0].Tags[1].Key) == "hc-class" and (.[0].Tags[1].Value) == "staging-standalone")