选择 json 个不包含子项的条目

selecting json entries that dont contain subkey

我是jq的新手。我有一个 json 文件,看起来像这样

[
{
"k1":"a",
"k2":"aa",
"k3":["sk1":"a","sk2":"cc","sk3":"cc"],
"k4":["sk6":"zs","sk8":"we",...],
...
},
{
"k1":"b",
"k2":"ba",
"k3":["sk1":"a","sk3":"cc",...],
"k4":["sk6":"zs","sk8":"we",...],
...
},
{
"k1":"b",
"k2":"ba",
"k4":["sk6":"zs","sk8":"we",...],
...
}
...
]

我想获取数组中的所有条目,使得键 3(“k3”)没有子键“sk2”。请注意,数组的某些元素没有“k3”(所以我想删除它们)然后那些有“k3”的元素有时没有“sk2”(这就是我想要的)。

如何在 jq 中完成此操作?

可以用select过滤,has查键:

jq 'map(select(has("k3") and (.k3 | has("sk2") | not)))' file.json
[
  {
    "k1": "b",
    "k2": "ba",
    "k3": {
      "sk1": "a",
      "sk3": "cc"
    },
    "k4": {
      "sk6": "zs",
      "sk8": "we"
    }
  }
]

Demo