如何将节点父级的字段映射/添加到特定的子叶中?



给定以下示例JSON对象(根据GitHub GraphQL查询结果建模(:

示例

{
"data": {
"repository": {
"releases": {
"nodes": [
{
"tagName": "v2.0.0",
"date": "2022-10-26T14:22:15Z",
"releaseAssets": {
"nodes": [
{
"name": "foo-2.0.0.tar.gz",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v2.0.0/foo-2.0.0.tar.gz"
},
{
"name": "foo-2.0.0-arm64.AppImage",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v2.0.0/foo-2.0.0-arm64.AppImage"
}
]
}
},
{
"tagName": "v1.3.0",
"date": "2021-03-10T07:10:41Z",
"releaseAssets": {
"nodes": [
{
"name": "foo-1.3.0.tar.gz",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v1.3.0/foo-1.3.0.tar.gz"
},
{
"name": "foo-1.3.0-arm64.AppImage",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v1.3.0/foo-1.3.0-arm64.AppImage"
}
]
}
},
{
"tagName": "v0.9.9",
"releaseAssets": {
"nodes": []
}
}
]
}
}
}
}

有人能告诉我什么jq-fu将把tagNamedate字段映射到nodes[]中的每个项中,并跳过空的nodes数组以产生以下所需的输出吗?

所需输出

[
{
"name": "foo-2.0.0.tar.gz",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v2.0.0/foo-2.0.0.tar.gz",
"tagName": "v2.0.0",
"date": "2022-10-26T14:22:15Z",
},
{
"name": "foo-2.0.0-arm64.AppImage",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v2.0.0/foo-2.0.0-arm64.AppImage"
"tagName": "v2.0.0",
"date": "2022-10-26T14:22:15Z",
},
{
"name": "foo-1.3.0.tar.gz",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v1.3.0/foo-1.3.0.tar.gz"
"tagName": "v1.3.0",
"date": "2021-03-10T07:10:41Z"
},
{
"name": "foo-1.3.0-arm64.AppImage",
"downloadUrl": "https://github.com/foo/foo-releases/releases/download/v1.3.0/foo-1.3.0-arm64.AppImage"
"tagName": "v1.3.0",
"date": "2021-03-10T07:10:41Z"
}
]

如何以最有效的方式获得上述输出?

您正在寻找这样的东西:

.data.repository.releases.nodes | map({tagName, date} + .releaseAssets.nodes[])

在线演示

最新更新