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

如何用jq将父节点字段映射到子节点并跳过空数组?

使用jq处理GitHub GraphQL Release资产的高效实现方式

核心实现命令

直接使用以下jq表达式即可完成需求,兼顾效率和简洁性:

.releases.nodes[]
| select(.releaseAssets.nodes | length > 0)
| .releaseAssets.nodes[]
| . + {tagName: ../tagName, date: ../publishedAt}

分步解释

  • .releases.nodes[]:遍历所有release节点
  • select(.releaseAssets.nodes | length > 0):过滤掉没有资产文件的release(跳过releaseAssets.nodes为空的条目)
  • .releaseAssets.nodes[]:遍历当前release下的所有资产节点
  • . + {tagName: ../tagName, date: ../publishedAt}:将父级release的tagName和发布时间(映射为需求中的date字段)合并到每个资产对象中

输出为JSON数组(可选)

如果需要将结果整理为单个JSON数组而非流式输出,在外层包裹数组构造器即可:

[
  .releases.nodes[]
  | select(.releaseAssets.nodes | length > 0)
  | .releaseAssets.nodes[]
  | . + {tagName: ../tagName, date: ../publishedAt}
]

示例验证

输入示例(GitHub GraphQL返回结构)

{
  "releases": {
    "nodes": [
      {
        "tagName": "v1.0.0",
        "publishedAt": "2023-01-01T00:00:00Z",
        "releaseAssets": {
          "nodes": [
            {
              "name": "app-linux.zip",
              "downloadUrl": "https://example.com/app-linux.zip"
            },
            {
              "name": "app-windows.exe",
              "downloadUrl": "https://example.com/app-windows.exe"
            }
          ]
        }
      },
      {
        "tagName": "v1.0.1",
        "publishedAt": "2023-01-05T00:00:00Z",
        "releaseAssets": {
          "nodes": []
        }
      },
      {
        "tagName": "v1.1.0",
        "publishedAt": "2023-02-01T00:00:00Z",
        "releaseAssets": {
          "nodes": [
            {
              "name": "app-macos.dmg",
              "downloadUrl": "https://example.com/app-macos.dmg"
            }
          ]
        }
      }
    ]
  }
}

输出示例

{
  "name": "app-linux.zip",
  "downloadUrl": "https://example.com/app-linux.zip",
  "tagName": "v1.0.0",
  "date": "2023-01-01T00:00:00Z"
}
{
  "name": "app-windows.exe",
  "downloadUrl": "https://example.com/app-windows.exe",
  "tagName": "v1.0.0",
  "date": "2023-01-01T00:00:00Z"
}
{
  "name": "app-macos.dmg",
  "downloadUrl": "https://example.com/app-macos.dmg",
  "tagName": "v1.1.0",
  "date": "2023-02-01T00:00:00Z"
}

效率说明

该实现采用jq的流式处理模型,仅做必要的遍历与筛选操作,无冗余计算,能够高效处理大体积的GitHub GraphQL返回数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:55:44