使用jq进行查找过滤:根据名称筛选并获取对应年龄
如何用jq按名称过滤JSON并获取对应年龄?
假设我们有这样的JSON数据:
[ { "id": 1, "name": "Arthur", "age": "21" }, { "id": 2, "name": "Richard", "age": "32" } ]
要实现指定名称(比如"Richard")后返回对应的年龄("32"),用jq可以这样做:
基础命令(处理所有匹配项)
如果你的JSON存在文件中(比如命名为data.json),执行这条命令:
jq '.[] | select(.name == "Richard") | .age' data.json
如果是直接通过管道传入JSON字符串:
echo '[ { "id": 1, "name": "Arthur", "age": "21" }, { "id": 2, "name": "Richard", "age": "32" } ]' | jq '.[] | select(.name == "Richard") | .age'
命令拆解
咱们来拆解下每个部分的作用:
.[]:遍历数组中的每一个对象元素select(.name == "Richard"):筛选出name字段严格等于"Richard"的对象.age:从筛选后的对象中提取age字段的值
进阶:只返回第一个匹配项
如果担心数据里有重名的条目,想要只获取第一个匹配的年龄,可以加上first:
jq 'first(.[] | select(.name == "Richard")) | .age' data.json
这样就能精准拿到你需要的年龄值啦~
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

