[英]How do I filter a JSON output using jq with a nested sub-key value
我正在尝试使用jq
从curl
output 中过滤latest
的 Docker 图像版本。 到目前为止,我可以来到这里:
命令curl https://docker.hub.example.net/api/v1.0/projects/myapp/repositories/artifacts | jq -r '(.[] | {摘要,标签})'
Output:
注意:一些子键已被删除,实际值已被 output 中的一些示例值替换。
{
"digest": "sha256:.......",
"tags": [
{
"artifact_id": 123456,
"name": "latest",
},
{
"artifact_id": 123456,
"name": "1.0.1234567890.ab12cd3",
}
]
}
{
"digest": "sha256:.......",
"tags": [
{
"artifact_id": 234567,
"name": "1.0.1234567890.bc23de4",
}
]
}
{
"digest": "sha256:.......",
"tags": [
{
"artifact_id": 345678,
"name": "1.0.1234567890.cd34ef5",
}
]
}
在上面的output中可以看到,只有一个摘要有两个标签,其内容相同,只是name
子键值不同。 一个是"name": "latest"
,另一个是镜像版本(例如"name": "1.0.1234567890.ab12cd3"
)。 其他摘要只有一个标签。
我需要从具有"name": "latest"
的另一个标签的摘要中获取图像版本。 如果可能的话,我更喜欢避免脚本循环,而只使用jq
选项。
我怎样才能做到这一点?
将select
与any
组合使用:
curl ... | jq -r '
.[] | select(.tags | any(.name == "latest"))
| first(.tags[] | select(.name != "latest")).name
'
1.0.1234567890.ab12cd3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.