繁体   English   中英

如何使用带有嵌套子键值的 jq 过滤 JSON output

[英]How do I filter a JSON output using jq with a nested sub-key value

我正在尝试使用jqcurl 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选项。

我怎样才能做到这一点?

selectany组合使用:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM