Разбор JSON с проблемами jq if-then-else
Я пишу скрипт, который будет анализировать файл JSON и извлекать некоторые имена контейнеров докеров и серверы, на которых они работают. Затем мне нужно сделать некоторые другие вещи в bash с информацией, которую я получаю. Я новичок в использовании jq
но вот что я получил до сих пор.
Я запускаю следующее:
cat env.json | jq '[.env.service.config | .[] | {dockerContainerName:.dockerConfig.dockerImageName,servers:[.allocation[].serverName]}]'
Это дает мне вывод:
[
{
"dockerContainerName": null,
"servers": []
},
{
"dockerContainerName": "my_awesome_container",
"servers": [
"serverX01",
"serverX02"
]
},
...
...
]
Как видно из результата, некоторые из конфигов службы не имеют dockerConfig.dockerImageName. Мне нужно ограничить то, что возвращается, чтобы отфильтровать те, которые не имеют dockerConfig. Я пытался использовать if-then-else, но не могу заставить его работать правильно.
Есть идеи?
1 ответ
Решение
Ты можешь использовать select
ограничить содержимое массива объектами, чьи dockerContainerName
отличается от null
:
jq '.[] | select(.dockerContainerName != null)' <<EOF
[
{
"dockerContainerName": null,
"servers": []
},
{
"dockerContainerName": "my_awesome_container",
"servers": [
"serverX01",
"serverX02"
]
}
]
EOF
{
"dockerContainerName": "my_awesome_container",
"servers": [
"serverX01",
"serverX02"
]
}