提取子键并展平为 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"
}
]
尝试的解决方案
我可以在任何深度检索每个单独的字段
-
[.[]|.nameWithOwner] // ["KyleMit/stack-posts","KyleMit/HelloSERN"]
-
[.[]|.defaultBranchRef.name] // ["main","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"
}
]
我正在尝试使用 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"
}
]
尝试的解决方案
我可以在任何深度检索每个单独的字段
-
[.[]|.nameWithOwner] // ["KyleMit/stack-posts","KyleMit/HelloSERN"]
-
[.[]|.defaultBranchRef.name] // ["main","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"
}
]