如何解决删除存在于同级对象中并具有一定值的键
我有以下输入文件:
sigma-table
我想用jq删除字典{
"dic": {
"a": "","b": "","c": "","d": ""
},"remove": {
"b": true,"c": false,"d": true
}
}
中所有值也在true的字典dic
中的所有元素。
这将是输出:
remove
我不确定该怎么做。我首先需要清理{
"dic": {
"a": "","c": ""
},"d": true
}
}
dic,仅获取值为true的键。然后,我只需要从remove
删除这些密钥即可。
解决方法
您不需要JQ。
[.remove | path(.[] | select(.))] as $p | .dic |= delpaths($p)
如果remove
中可能还有除 true 和 false 之外的其他值,请使用
select(. == true)
代替
select(.)
,
这里是仅使用jq的简单有效的解决方案:
(.remove | with_entries(select(.value == true))) as $remove
| .dic |= with_entries(select($remove[.key] | not))
,
可以使用bash循环来完成:
#!/bin/bash
# saving the json so we can manipulate it freely
data="$(cat data.json)"
for k in $(echo "$data" | jq '.remove' | jq -r keys[]) # getting all the keys from remove
do
# skipping the key if it isn't supposed to be removed
[ $(echo "$data" | jq .remove.$k) == 'false' ] && continue
data="$(echo "$data" | jq "del(.dic.$k)")" # removing the key
done
echo "$data" # final json without the keys
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。