Как получить значение true с помощью массива JQ - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь использовать следующую команду 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" 

обнаружено и без возврата мне списка значений.

Ответы [ 3 ]

2 голосов
/ 20 марта 2019

Очень эффективное решение (как во времени, так и в пространстве) легко благодаря any/2:

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

Это, конечно, оценивается как true или false. Если вы хотите true или вообще ничего, вы можете добавить // empty к вышеуказанному.

0 голосов
/ 20 марта 2019

, если вы открыты для альтернатив, вот еще один (на основе утилиты Unix jtc):

bash $ <file.json jtc -w'[Key]:<^aws:cloudformation:stack-name$()>R' -T'true{$1}'
true
bash $ <file.json jtc -w'[Key]:<^blah$()>R' -T'true{$1}'
bash $ 

небольшой трюкis: выполнить совпадение RE, используя фальшивую / пустую группу (в конце RE), просто убедитесь, что интерполяция включается для шаблона при успешном совпадении.

0 голосов
/ 20 марта 2019

Решение, которое создает массив логических значений из .tags и после использования any для объединения всех логических значений

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