提取子键并展平为 JQ 中的父对象输出

Extract child key and flatten into parent object output in JQ

我正在尝试使用 JQ

来简化嵌套的 JSON 结构

输入

[
  {
    "defaultBranchRef": {
      "name": "main"
    },
    "nameWithOwner": "KyleMit/stack-posts"
  },
  {
    "defaultBranchRef": {
      "name": "master"
    },
    "nameWithOwner": "KyleMit/HelloSERN"
  }
]

期望的输出

[
  {
    "nameWithOwner": "KyleMit/stack-posts",
    "defaultBranchName": "main"
  },
  {
    "nameWithOwner": "KyleMit/HelloSERN",
    "defaultBranchName": "master"
  }
]

尝试的解决方案

我可以在任何深度检索每个单独的字段

但不太明白如何将字段/选择器组合成 return 多个值

对其他解决方案开放,但一种组合方式是使用 Object Construction like

[.[]|{nameWithOwner, defaultBranchName: .defaultBranchRef.name}]

哪个results in the following output:

  {
    "nameWithOwner": "KyleMit/stack-posts",
    "defaultBranchName": "main"
  },
  {
    "nameWithOwner": "KyleMit/HelloSERN",
    "defaultBranchName": "master"
  }
]

只需将 |= defaultBranchRef 字段更新为其 name 子字段的内容:

jq '.[].defaultBranchRef |= .name'
[
  {
    "defaultBranchRef": "main",
    "nameWithOwner": "KyleMit/stack-posts"
  },
  {
    "defaultBranchRef": "master",
    "nameWithOwner": "KyleMit/HelloSERN"
  }
]

Demo