我正在尝试使用jq从包含特定值的JSON字段中提取数据。
这是我正在使用的JSON:
{
"thing1": {
"a": false,
"b": true,
"c": false,
"d": false
},
"thing2": {
"a": true,
"b": true,
"c": true,
"d": true
},
"thing3": {
"a": true,
"b": false,
"c": false,
"d": false
}
}
我想保留包含"true"
值的对象,并删除其值不是true
的键。
我在JQ方面没有太多经验,也没有如何正确构造json数据。如果这意味着要重组主要的JSON数据,我也愿意这样做。
这是我想要达到的结果:
{
"thing1": {
"b": true
},
"thing2": {
"a": true,
"b": true,
"c": true,
"d": true
},
"thing3": {
"a": true
}
}
答案 0 :(得分:1)
# First remove the subkeys that are not truthy:
map_values(with_entries(select(.value)))
# ... then remove the empty dictionaries:
| with_entries(select(.value|length > 0))
添加调味料。
答案 1 :(得分:0)
即使问题专门针对 jq ,所讨论的JSON操作类型也很典型,并且可以使用基于walk-path
的unix来实现或者实用程序 jtc
。
有多种方法可以做到:
1。删除(-p
)所有不需要的(此处为false
值):
jtc -w'<false>j:' -p input.json
2。删除所有JSON值,但需要的(-pp
),这里是true
值:
jtc -w'<true>j:' -pp input.json
PS>披露:我是jtc
-用于JSON操作的shell cli工具的创建者
答案 2 :(得分:0)
另一个jq脚本:
<file jq 'del(..|select(. == false))'
此操作将递归转到所有节点(运算符..
),并删除所有值为false
的元素。
如果需要,您可以用select
以外的其他名称(例如false
来更改"Failure"
中的条件。