删除存在于同级对象中并具有特定值的键

Noi*_*oim 5 bash json jq

我有以下输入文件:

{
    "dic": {
        "a": "",
        "b": "",
        "c": "",
        "d": ""
    },
    "remove": {
        "b": true,
        "c": false,
        "d": true
    }
}
Run Code Online (Sandbox Code Playgroud)

我想用 jq 删除字典中的所有元素,这些元素dic也在字典中remove,值为 true。

这将是输出:

{
    "dic": {
        "a": "",
        "c": ""
    },
    "remove": {
        "b": true,
        "c": false,
        "d": true
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道该怎么做。我首先需要清理removedic 并只获取值为 true 的键。然后我需要以某种方式只从dic.

ogu*_*ail 4

除了 JQ 之外,您不需要任何其他东西。

[.remove | path(.[] | select(.))] as $p | .dic |= delpaths($p)
Run Code Online (Sandbox Code Playgroud)

在线演示

remove如果除了truefalse之外可能还有其他值,请使用

select(. == true)
Run Code Online (Sandbox Code Playgroud)

代替

select(.)
Run Code Online (Sandbox Code Playgroud)