如何用jq筛选demographic数组中同对象满足双条件的JSON数据?
问题:筛选JSON数组中同一对象同时满足双条件的条目
示例输入JSON:
{"id": "3DFD4GF", "demographic": [{"country": "Spain", "rating": 7},{"country": "Germany", "rating": 2}]}
需求:筛选出demographic数组中存在同一对象同时满足country为"Canada"且rating为10的JSON条目。
之前尝试的jq语句:
jq 'select((.demographic[].country=="Canada") and .demographic[].rating==10)' json
该语句的问题是:会匹配数组中任意两个不同对象分别满足单个条件的情况,无法实现同一对象同时满足双条件的需求。
期望输出示例:
{"id": "454FGF6", "demographic": [{"country": "Germany", "rating": 4},{"country": "Canada", "rating": 10}]}
解决方法
使用jq的any函数结合对象内的复合条件判断,确保是同一对象同时满足两个要求:
jq 'select(any(.demographic[]; .country == "Canada" and .rating == 10))' json
原理说明
.demographic[]遍历数组中的每个对象any(;)函数检查是否存在至少一个对象满足后面的复合条件.country == "Canada" and .rating == 10- 这样就能保证是同一个对象同时符合两个条件,而非数组中不同对象分别满足单个条件
内容的提问来源于stack exchange,提问作者Wiseface
相关产品推荐
相关产品推荐

