使用 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)

使用 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"
      }
    ]
  }
]

Demo