我有一个看起来像这样的 JSON 对象:
{
"a": [{
"name": "x",
"group": [{
"name": "tom",
"publish": true
},{
"name": "joe",
"publish": true
}]
}, {
"name": "y",
"group": [{
"name": "tom",
"publish": false
},{
"name": "joe",
"publish": true
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
我想选择其中的所有条目publish=true并创建一个简化的 JSON 对象数组,如下所示:
[
{
"name": "x"
"groupName": "tom"
},
{
"name": "x"
"groupName": "joe"
},
{
"name": "y"
"groupName": "joe"
}
]
Run Code Online (Sandbox Code Playgroud)
我尝试了很多组合,但是 group 是一个数组的事实似乎阻止了每个组合的工作。在这种特定情况下以及一般情况下,您如何在不丢失完整层次结构的情况下进行深度选择?
你可以使用这个:
jq '.[]|map(
.name as $n
| .group[]
| select(.publish==true)
| {name:$n,groupname:.name}
)' file.json
Run Code Online (Sandbox Code Playgroud)
Using<expression> as $varname允许您在深入层次结构之前将值存储在变量中。
jq -n '
[inputs[][]
| .name as $group
| .group[]
| select(.publish == true)
| {name, groupName: $group}
]' <input.json
Run Code Online (Sandbox Code Playgroud)