You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用单条jq命令合并输出.next字段与符合条件的digest值

单次curl请求同时提取Docker Hub镜像标签两个字段的实现方案

需求说明

需要从Docker Hub标签接口返回的JSON中提取两个目标值:

  • 顶层字段.next(下一分页的接口地址)
  • 满足.name == "latest"且镜像architecture == "amd64"条件的条目对应的.digest字段值
    要求仅发起一次curl请求,单次输出两个结果,格式为:
    [amd64架构latest标签的digest值], [下一页链接]

参考返回JSON结构(截取核心片段)

{
  "count": 685,
  "next": "https://hub.docker.com/v2/repositories/grafana/grafana/tags/?page=2&page_size=100",
  "previous": null,
  "results": [
    {
      "creator": 4132603,
      "id": 190096972,
      "images": [
        {
          "architecture": "amd64",
          "digest": "sha256:1e180fcaede581b8cc8e2ce8bc010daff9c64972023a0faaf226d92bd9840113",
          "os": "linux"
        },
        {
          "architecture": "arm64",
          "variant": "v8",
          "digest": "sha256:834e26ec5e5f4e5eb2410147c12b060143906de04f35eb51cae8285e9b646a56",
          "os": "linux"
        },
        {
          "architecture": "arm",
          "variant": "v7",
          "digest": "sha256:3bc954cb89f35bdc0705a381ab9b9a49b014074fbc555c61bf7572cb0965f323",
          "os": "linux"
        }
      ],
      "name": "latest"
    }
  ]
}

原有单独执行的命令

  • 获取amd64架构latest标签digest:
curl -s "https://hub.docker.com/v2/repositories/grafana/grafana/tags/" | jq --raw-output '.results[] | select(.name=="latest").images[] | select(.architecture=="amd64").digest'

输出:sha256:1e180fcaede581b8cc8e2ce8bc010daff9c64972023a0faaf226d92bd9840113

  • 获取下一页链接:
curl -s "https://hub.docker.com/v2/repositories/grafana/grafana/tags/" | jq --raw-output '.next'

输出:https://hub.docker.com/v2/repositories/grafana/grafana/tags/?page=2

最终实现命令

调整jq过滤逻辑,在同一次解析中完成两个字段的提取和格式化拼接,全程仅发起一次HTTP请求:

curl -s "https://hub.docker.com/v2/repositories/grafana/grafana/tags/" | jq -r '. as $root | [($root.results[] | select(.name=="latest").images[] | select(.architecture=="amd64").digest), $root.next] | join(", ")'

逻辑说明

  1. 用. as $root保存根对象引用,避免管道切换上下文后无法访问顶层.next字段
  2. 字段筛选逻辑和原有命令完全一致,不会出现取值偏差
  3. 将digest和.next两个值按输出顺序存入数组
  4. 通过join(", ")将数组元素拼接为逗号分隔的字符串
  5. -r(即--raw-output)参数直接输出纯文本,不带JSON字符串的引号包裹
    执行后直接输出符合要求的结果:
sha256:1e180fcaede581b8cc8e2ce8bc010daff9c64972023a0faaf226d92bd9840113, https://hub.docker.com/v2/repositories/grafana/grafana/tags/?page=2&page_size=100

内容的提问来源于stack exchange,提问作者theautomation

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 14:48:15