JSON 解析 jq if-then-else 问题
JSON Parsing with jq if-then-else issues
我正在编写一个脚本,它将解析一个 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,但似乎无法使其正常工作。
有什么想法吗?
您可以使用 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"
]
}
我正在编写一个脚本,它将解析一个 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,但似乎无法使其正常工作。
有什么想法吗?
您可以使用 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"
]
}