如何使用jq从含嵌套标签键值对的列表中提取多字段并展示指定标签
解决方案
你可以在jq的字符串插值里新增一段逻辑,从Tags数组中筛选指定Key的标签值,完整命令如下:
cat subnets.json | jq '.Subnets[] | "\(.Id) \(.SubnetId) \((.Tags[] | select(.Key == "Status").Value) // "N/A")"'
命令说明
- 原有提取
Id、SubnetId的逻辑保持不变 - 新增的
(.Tags[] | select(.Key == "Status").Value)段:遍历当前子网的Tags数组,筛选出Key为Status的标签,取对应的Value值 - 末尾的
// "N/A"是可选容错逻辑:如果某个子网不存在Key为Status的标签,会自动输出N/A避免报错,不需要该逻辑可以直接删除这部分。
优化建议
如果不需要输出结果前后的引号,可以给jq加上-r参数输出原始字符串:
cat subnets.json | jq -r '.Subnets[] | "\(.Id) \(.SubnetId) \((.Tags[] | select(.Key == "Status").Value) // "N/A")"'
样例输出(加-r参数后)
bar1 foo1 dev bar2 foo2 dev
内容的提问来源于stack exchange,提问作者user17036156
相关产品推荐
相关产品推荐

