使用jq获取缺少键的数组元素



我有以下json数组

[
{
"k1":"n1",
"k2":[
{"a1":"v1",
"a2":[{"b1":"v11"},...],
"a3":"v3",...},
{"a1":"v12",
"a3":"v32",...},

],
...
},
{
"k1":"n2",
"k2":[
{"a1":"v1",
"a3":"v3",...}
],
...
},
{
"k1":"n2",
"k3":[
{"s1":"v1",
"s3":"v3",...},
...
]
},
...
]

我想使用jq来获取键k2存在的所有元素,并返回没有子键"a2"k2的数组元素。对于上面的例子,我想返回

[
{
"k1":"n1",
"k2":[         
{"a1":"v12",
"a3":"v32",...},

],
},
...
]

(在第一个元素中,只有k2的第一个元素有子键a2,所以这是我唯一删除的元素,第二个元素有k2,但k2没有任何具有a2的元素,第三个元素没有k2)

使用selecthas过滤,使用map调整输出。

jq 'map(
select(has("k2") and any(.k2[]; has("a2")))
| .k2 |= map(select(has("a2") | not))
)'
[
{
"k1": "n1",
"k2": [
{
"a1": "v12",
"a3": "v32"
}
]
}
]

演示

相关内容

  • 没有找到相关文章

最新更新