繁体   English   中英

如何过滤嵌套数组中不包含键值对的条目

[英]How can I filter for entries that do NOT contain a key-value pair within a nested array

假设我有以下 JSON 输出:

{
 "Stacks": [
        {
            "StackName": "hello-world",
            "Tags": [
                {
                    "Key": "environment",
                    "Value": "sandbox"
                },
                {
                    "Key": "Joe Shmo",
                    "Value": "Dev"
                }
            ]
        },
        {
            "StackName": "hello-man",
            "Tags": [
                {
                    "Key": "environment",
                    "Value": "live"
                },
                {
                    "Key": "Tandy",
                    "Value": "Dev"
                }
            ]
        }
    ]
}

我将如何编写一个jq查询来获取所有StackName s 以获取没有Tags"Key": "Joe Shmo" 所以结果将简单地返回hello-man

.Stacks[]
| select( any(.Tags[]; .Key == "Joe Shmo" ) | not)
| .StackName

这有效地检查相等性( any具有短路语义),而contains将检查包含。

使用contains ,像这样:

jq -r '.Stacks[]|select(.Tags|contains([{"Key": "Joe Shmo"}])|not).StackName'

注意: -r从输出中删除引号,否则jq将打印"hello-man" (在双引号内)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM