选择 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"
}
}
]
我是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"
}
}
]