使用jq筛选JSON列表中max=0的元素name遇问题求助
解决jq筛选JSON数组中特定元素的问题
我懂你这种卡壳的感觉——明明想筛出max等于0的元素的name,结果把不符合条件的也带出来了,肯定挺闹心的。咱们先拆解下你原来写法的问题,再给你靠谱的解决方案。
你原来写法的问题
你用的jq 'select(.[].max == 0)'逻辑不对:.[].max会先把数组里所有元素的max值都取出来,然后select是对整个数组做判断——只要数组里存在任意一个元素的max是0,整个数组就会被完整返回,这就是为啥你会拿到所有元素的原因。
正确的筛选写法
要实现只提取max等于0的元素的name,得按「遍历元素→筛选符合条件的→提取字段」的顺序来写:
1. 提取单个/多个独立的name值(每行一个)
jq '.[] | select(.max == 0) | .name' yourfile.json
.[]:把数组展开,逐个处理里面的每个对象元素select(.max == 0):只保留max字段等于0的元素.name:从筛选后的元素里提取name字段
2. 把结果保留在数组中(输出一个JSON数组)
如果希望结果是一个包含所有符合条件name的数组,可以加个中括号包裹:
jq '[.[] | select(.max == 0) | .name]' yourfile.json
举个实际例子
用你给出的JSON片段补充完整后:
[ { "name": "PATCHING-vhdb", "ctm": "controlm-server", "available": "1", "max": 1, "workloadPolicy": "N/A" }, { "name": "PATCHING-vhi", "ctm": "controlm-server", "available": "0", "max": 0 } ]
用第一种命令会输出:
"PATCHING-vhi"
用第二种命令会输出:
["PATCHING-vhi"]
内容的提问来源于stack exchange,提问作者Robert Stinnett
相关产品推荐
相关产品推荐

