如何通过AWS CLI获取无嵌套数组的标准JSON格式结果
问题
在Linux环境下执行这条AWS CLI命令:
aws ec2 describe-subnets --subnet-ids "XXX" --query "Subnets[*].Tags" --output json
得到双层嵌套结构的JSON结果:
[ [ { "Key": "k1", "Value": "v1" }, { "Key": "k2", "Value": "v2" } ] ]
需要获取无双层嵌套的标准JSON格式,要么是单层标签对象数组,要么是键值对形式的对象。
解决办法
1. 直接修改AWS CLI的Query参数
因为你指定了单个子网ID,Subnets[*].Tags会把该子网的标签数组再包裹一层外层数组(对应所有匹配的子网集合)。直接定位到第一个子网的标签即可消除双层嵌套:
aws ec2 describe-subnets --subnet-ids "XXX" --query "Subnets[0].Tags" --output json
输出为单层标签数组:
[ { "Key": "k1", "Value": "v1" }, { "Key": "k2", "Value": "v2" } ]
如果想把标签转换成键值对形式的对象,用Query的from_entries语法:
aws ec2 describe-subnets --subnet-ids "XXX" --query "Subnets[0].Tags | from_entries" --output json
输出结果:
{ "k1": "v1", "k2": "v2" }
2. 用jq工具处理原命令输出
如果不想修改原AWS命令,可通过jq工具过滤双层数组:
- 提取内层数组(单个子网场景):
aws ec2 describe-subnets --subnet-ids "XXX" --query "Subnets[*].Tags" --output json | jq '.[0]'
- 若查询多个子网,需合并所有标签数组为一个:
aws ec2 describe-subnets --subnet-ids "XXX" --query "Subnets[*].Tags" --output json | jq 'flatten'
- 转换为键值对对象:
aws ec2 describe-subnets --subnet-ids "XXX" --query "Subnets[*].Tags" --output json | jq '.[0] | from_entries'
内容的提问来源于stack exchange,提问作者user389955
相关产品推荐
相关产品推荐

