我正在编写一个脚本,它将解析JSON文件并提取出一些docker容器名称以及它们正在运行的服务器。然后我需要在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但似乎无法让它正常工作。
有任何想法吗?
答案 0 :(得分: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"
]
}