如何使用jq获取过滤后的locations数组的长度?
用jq筛选数组后统计结果数量的正确方法
问题场景
你的JSON文件my_locations.json包含一个locations数组,需要筛选出同时拥有is_shop和has_parking_space属性的对象,并获取筛选后结果的总个数。
你尝试的命令:
$ jq ".locations[] | select(.is_shop and .has_parking_space) | length" my_locations.json
输出的是每个符合条件的对象自身的长度(如重复出现的13),而非筛选后数组的元素总数。
解决方法
需要先将筛选后的所有对象收集为一个新数组,再获取该数组的长度,有两种常用写法:
写法1:用数组包裹筛选结果
jq '[.locations[] | select(.is_shop and .has_parking_space)] | length' my_locations.json
通过[ ... ]把遍历筛选后的所有元素包裹成数组,再对这个数组取length,得到的就是元素总个数。
写法2:使用map函数(更简洁)
jq '.locations | map(select(.is_shop and .has_parking_space)) | length' my_locations.json
map函数会对数组中的每个元素执行筛选逻辑,返回新的结果数组,再取该数组的length即可得到统计数。
内容的提问来源于stack exchange,提问作者Leevi L
相关产品推荐
相关产品推荐

