JSON JQ — фильтр с двумя операторами

Я использую приведенную ниже таблицу, которая работает отлично, но я хочу добавить еще одну переменную к фильтрации, желательно «содержит», поскольку я хочу отфильтровать ее на основе поля ОС, которое содержит разные строки:

curl -H "Принять: application/json; indent=4" -H "Авторизация: токен $token" "$url_devices" -k | jq -r --arg устройство "$device" '.results[] | select(.cluster.name == $cluster) | .primary_ip.address'

Заранее спасибо! Я попробовал следующий код, но он не сработал:

curl -H "Принять: application/json; indent=4" -H "Авторизация: токен $token" "$url_devices" -k | jq -r --arg устройство "$device" '.results[] | select(.cluster.name == $cluster И .cluster.os == $os) | .primary_ip.address'

Используйте (еще одну) опцию --arg, чтобы определить дополнительные внешние значения. (Обратите внимание, что в вашем «рабочем» подходе определение только переменной device, а затем использование $cluster вместо нее не будет работать.) Что касается «поля, которое содержит разные строки», вам нужно будет быть более конкретным, чтобы получить помощь по этому вопросу. .

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

Ответы 1

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

Вы можете легко объединить несколько фильтров select:

.results[]
| select(.cluster.name == $cluster)
| select(.cluster.os == $os)
| .primary_ip.address

или объедините несколько предикатов с помощью и (обратите внимание на регистр):

.results[]
| select(.cluster.name == $cluster and .cluster.os == $os)
| .primary_ip.address

Результат идентичен.

Чтобы проверить, содержит ли строка другую подстроку, вы должны использовать:

.results[]
| select(.cluster.name == $cluster)
| select(.cluster.os | contains($os))
| .primary_ip.address

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