如何使用jq提取未知层级的目标键值对(单匹配或首个匹配)
提取未知层级的JSON键值
当确定键的层级时,你可以用这类命令直接提取:
jq -r .x <<< '{"x": "abc"}'
如果不确定目标键x所在的层级,不管它嵌套在多少层对象或数组里,都可以用jq的递归遍历语法来定位:
提取首个匹配项
只需一行命令就能拿到第一个找到的x的值:
jq -r '.. | select(has("x")) | .x' <<< '{..., {"x": "abc"}, ...}'
更简洁的写法,利用安全访问避免报错:
jq -r '.. | .x? | select(.)' <<< '{..., {"x": "abc"}, ...}'
提取所有匹配项
如果JSON里有多个x键,上面的命令会输出所有匹配的值(每行一个)。
语法说明
..:递归遍历JSON结构的每一个节点,包括嵌套对象、数组元素等。select(has("x")):筛选出包含x键的节点。.x?:安全访问x键,节点没有该键时返回null,不会抛出错误。select(.):过滤掉null、false这类无效值,只保留有效的x值。
内容的提问来源于stack exchange,提问作者user119720
相关产品推荐
相关产品推荐

