Используйте параметр AWS CLI --query для фильтрации одномерного массива

Можно ли использовать параметр --query в интерфейсе командной строки AWS (описан здесь) для фильтрации одномерного массива? Все примеры, которые я могу найти на сайте AWS, отлично подходят для карт, но я не мог понять синтаксис для простого массива.

Рассмотрим команду Dynamodb list-tables, которая имеет массив строк на выходе:

aws dynamodb list-tables

Пример вывода:

{
    "TableNames": [
        "Questions", 
        "Answers",
        "Votes"
    ]
}

Скажем, я хочу выяснить, содержит ли TableNames «Ответы». Синтаксис, который я пробовал, недействителен или не работает.

aws dynamodb list-tables --query 'TableNames[?==`Answers`]'
aws dynamodb list-tables --query 'TableNames[?.==`Answers`]'
aws dynamodb list-tables --query '[?TableNames[*]==`Answers`]'

person Jamey    schedule 05.11.2015    source источник


Ответы (1)


Чтобы обратиться к текущему элементу в массиве, вы можете использовать символ @:

$ aws dynamodb list-tables  --query "TableNames[? @ == 'Answers' ]"
[
    "Answers"
]

Если вам просто нужен правильный / ложный ответ «существует ли это имя таблицы в списке таблиц», вы также можете использовать:

$ aws dynamodb list-tables  --query "contains(TableNames, 'Answers')"
true
person jamesls    schedule 05.11.2015
comment
Потрясающие! Спасибо! Кроме того, существует ли этот элемент - это именно тот вопрос, на который я пытался ответить с помощью опции --query. - person Jamey; 06.11.2015
comment
Это помогло мне по одной простой причине: двойные кавычки вокруг запроса и одинарные кавычки вокруг значения фильтра. По-другому просто не сработало. - person GoForth; 07.04.2021