Как проверить, есть ли точное совпадение в списке jq

Я пытаюсь найти тег, соответствующий определенному репозиторию изображений в реестре Docker.

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list\

result: {"name":"ancean-api","tags":["v1.0.0","v19.0.0","v11.1.1"]}

Как проверить, существует ли тег v1.0.0(example) в выходных данных json, как показано выше?


Я пытался

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | select(. == v1.0.19)'

jq-документ Документ jq попытался использовать select, но потерпел неудачу. Приведенная выше команда успешна независимо от того, какой тег используется.

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq '.tags | .[]' | grep "v1.0.0"

Я пытался использовать его с grep, но безуспешно.


Проблема решена

Через ответ в личку решил проблему с функцией IN.

curl -X GET http://my-registry-ip-address/v2/ancean-api/tags/list | jq IN'(.tags[]; "v1.0.0")'

Используя IN, я смог вернуть значение bool, когда в данных json было определенное значение.

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если объект, содержащий ключ tags, находится внутри ключа default другого объекта (как показано в вашем примере, хотя кавычки отсутствуют), вам необходимо включить его в путь.

Там вы можете использовать функцию IN для проверки содержания рассматриваемого элемента, которая выдает логическое значение:

IN(.default.tags[]; "v1.0.0")

Кроме того, флаг --exit-status (или -e) может устанавливать статус выхода в зависимости от результата.

Спасибо за ваш ответ. Я решил проблему через ваш ответ. [[ $(curl -X GET http://$REGISTRY/v2/$IMAGE_NAME/tags/list | jq IN'(.tags[]; "'${IMAGE_TAG}'")') = "false" ]] Приведенный выше код позволяет проверить наличие тега запрошенного изображения в реестре. И дефолт - это моя ошибка. по умолчанию не используются данные, содержащиеся в данных JSON. Мне следовало использовать результат, но это опечатка. Я очень ценю вашу помощь.

Antoliny 15.08.2024 09:26
if curl -X GET http://$REGISTRY/v2/$IMAGE_NAME/tags/list | jq --arg tag "$IMAGE_TAG" -e 'IN(.tags[]; $tag) | not' >/dev/null; then …; else …; fi
pmf 15.08.2024 11:01

Другие вопросы по теме