【问题标题】:How to get return true with jq array value如何使用 jq 数组值返回 true
【发布时间】:2019-03-20 02:59:29
【问题描述】:

如果列表中的任一条件为真,我正在尝试使用以下 jq 命令返回真输出。

.Tags[] as $t| "aws:cloudformation:stack-name"| IN($t[])   

输入

 {
    "Tags": [{
            "Value": "INF-D-XX-SEC-OPNV-UW1",
            "Key": "Name"
        },
        {
            "Value": "INF-D-XX-CFS-StandardInfrastructure-UW1",
            "Key": "aws:cloudformation:stack-name"
        },
        {
            "Value": "sgOpenVPNAccess",
            "Key": "aws:cloudformation:logical-id"
        },
        {
            "Value": "UW1",
            "Key": "Location"
        },
        {
            "Value": "INF",
            "Key": "Application"
        },
        {
            "Value": "D",
            "Key": "Parent Environment"
        },
        {
            "Value": "arn:aws:cloudformation:us-west-1:111111:stack/INF-D-XX-CFS-StandardInfrastructure-UW1/1111-11-11e8-96fe-11",
            "Key": "aws:cloudformation:stack-id"
        },
        {
            "Value": "OPNV",
            "Key": "ResourceType"
        }
    ]
}

这给了我一个返回的布尔值列表,如下所示,

--输出--

true
false
false
false
false
false
false

如果其中一个

,我想返回一个值true
Key="aws:cloudformation:stack-name" 

被检测到并且没有给我返回值列表。

【问题讨论】:

    标签: arrays json jq any


    【解决方案1】:

    感谢any/2,一个非常有效的解决方案(在时间和空间方面)很容易:

    any(.Tags[]; .Key == "aws:cloudformation:stack-name")
    

    这当然评估为truefalse。如果你想要true 或者什么都不想要,你可以在上面加上// empty

    【讨论】:

    • 这是一个很好的解决方案。为了在我最初的问题上添加更多上下文,如果上面的 jq 返回“false”,我想继续并评估 json 语句,否则就摆脱它。那可能吗? any(.Tags[]; .Key == "aws:cloudformation:stack-name") | **continue to evaluate json if no result found**
    • 这就是// 的用途,如响应中的示例所示。
    【解决方案2】:

    一个解决方案,即 从 .tags 构建一个布尔数组,然后使用 any 聚合所有布尔值

    jq '.Tags | map( .Key == "aws:cloudformation:stack-name" ) |  any ' 
    

    【讨论】:

      【解决方案3】:

      在@peak 上一个答案的基础上,由于无法发布 cmets,您可以使用 jq 的“-e”标志来设置退出状态,以便您可以轻松地将 shell 命令链接在一起。这避免了必须测试返回的字符串。

      jq -e 'any(.Tags[]; .Key == "aws:cloudformation:stack-name")' json >/dev/null && echo 'Exists' || echo 'Missing'
      

      【讨论】:

        猜你喜欢
        • 2018-01-04
        • 1970-01-01
        • 1970-01-01
        • 2021-01-26
        • 1970-01-01
        • 2016-02-17
        • 1970-01-01
        • 1970-01-01
        • 2016-11-08
        相关资源
        最近更新 更多