使用 jq 获取缺少键的数组元素
getting array elements missing a key with 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
存在的所有元素,只是 return k2
的数组元素没有子键 "a2"
.所以对于上面的例子,我想 return
[
{
"k1":"n1",
"k2":[
{"a1":"v12",
"a3":"v32",...},
],
},
...
]
(在第一个元素中,只有 k2 的第一个元素具有子键 a2,所以这是我删除的唯一一个,第二个元素具有 k2
但 k2 没有任何具有 a2
的元素第三个元素没有 k2
)
使用 select
和 has
过滤,使用 map
调整输出。
jq 'map(
select(has("k2") and any(.k2[]; has("a2")))
| .k2 |= map(select(has("a2") | not))
)'
[
{
"k1": "n1",
"k2": [
{
"a1": "v12",
"a3": "v32"
}
]
}
]
我有以下 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
存在的所有元素,只是 return k2
的数组元素没有子键 "a2"
.所以对于上面的例子,我想 return
[
{
"k1":"n1",
"k2":[
{"a1":"v12",
"a3":"v32",...},
],
},
...
]
(在第一个元素中,只有 k2 的第一个元素具有子键 a2,所以这是我删除的唯一一个,第二个元素具有 k2
但 k2 没有任何具有 a2
的元素第三个元素没有 k2
)
使用 select
和 has
过滤,使用 map
调整输出。
jq 'map(
select(has("k2") and any(.k2[]; has("a2")))
| .k2 |= map(select(has("a2") | not))
)'
[
{
"k1": "n1",
"k2": [
{
"a1": "v12",
"a3": "v32"
}
]
}
]