如何在Shell脚本中提取嵌套数组内的Name字段值
提取嵌套数组中所有Name字段的值
原始数据
listofallvms = [ [ { "Name": "aaa" } ], [ { "Name": "bbb" } ] ]
需求
仅输出每个Name字段的值,格式如下:
aaa bbb
问题分析
你当前的代码存在两处问题:
- 循环仅遍历了
listofallvms[0],只能处理数组的第一个子元素,无法覆盖所有数据; jq .[].[]的写法未精准定位到Name字段,且缺少-r参数(用于输出无引号的原始字符串)。
解决方案
无需使用bash循环,直接用jq即可一次性处理整个嵌套结构:
echo "$listofallvms" | jq -r '.[][].Name'
命令解释:
.[][]:先遍历外层数组的每个子数组,再遍历子数组内的每个对象;.Name:提取每个对象中的Name字段值;-r:让jq输出原始字符串,而非带双引号的JSON格式字符串。
如果listofallvms是bash数组,需先将其转换为标准JSON格式再处理:
printf '%s\n' "${listofallvms[@]}" | jq -s '.[][].Name'
内容的提问来源于stack exchange,提问作者Dhananjay Gahiwade
相关产品推荐
相关产品推荐

