使用jq工具过滤JSON数组:移除指定键全非true的元素
需求说明
给定如下JSON数组:
[ { "1": "false", "2": "true", "3": "true" }, { "1": "false", "2": "false", "3": "false" }, { "1": "true", "2": "true", "3": "true" } ]
需使用jq工具,传入参数数组["1","2","3"],移除数组中指定键对应的值全不为"true"的元素,最终得到如下结果:
[ { "1": "false", "2": "true", "3": "true" }, { "1": "true", "2": "true", "3": "true" } ]
解决方案
使用jq的--argjson参数传入指定键数组,结合any()函数完成过滤:
jq --argjson keys '["1","2","3"]' 'map(select(any($keys[]; .[$_] == "true")))' input.json
命令解释
--argjson keys '["1","2","3"]':将指定的键数组以JSON类型传入jq,命名为变量$keysmap(...):遍历输入数组中的每个对象select(any($keys[]; .[$_] == "true")):对每个对象检查是否存在任意一个指定键对应的值为"true",满足条件的对象保留,所有指定键值均为"false"的对象被移除
内容的提问来源于stack exchange,提问作者Maksims Edelmans
相关产品推荐
相关产品推荐

