Bash中导出JSON到环境变量丢失逗号,无法用jq处理的问题
解决AWS CLI查询网卡后JSON格式失效问题
问题原因
你的命令里jq -r '.NetworkInterfaces[]'犯了两个关键错误:
-r参数会让jq输出原始文本而非标准JSON结构,导致引号、逗号等语法符号丢失;.NetworkInterfaces[]会将数组内的每个对象单独输出,破坏了数组的包裹结构([])和元素间的分隔逗号。
正确解决方案
直接保留完整的JSON数组,移除错误的-r和数组拆分语法:
NETWORK_INTERFACE=$(aws ec2 describe-network-interfaces --filters Name=vpc-id,Values="${VPC_ID}" --output json | jq '.NetworkInterfaces')
此时变量中存储的是合法的JSON数组,后续可直接用jq处理,例如提取所有网卡的可用区:
echo "$NETWORK_INTERFACE" | jq -r '.[].AvailabilityZone'
遍历单个网卡对象的处理方式
如果需要逐个处理每个网卡对象,不要将结果存入单个变量,改用管道+循环:
aws ec2 describe-network-interfaces --filters Name=vpc-id,Values="${VPC_ID}" --output json | jq -c '.NetworkInterfaces[]' | while read -r nic_obj; do # 示例:打印当前网卡的描述信息 echo "$nic_obj" | jq -r '.Description' done
-c参数将每个JSON对象压缩为单行,避免换行导致循环读取异常。
为什么IFS/sed无法解决问题?
因为-r和数组拆分已经彻底破坏了JSON的语法结构,后续用文本处理工具修复属于治标不治本,从源头生成正确的JSON才是最优解。
内容的提问来源于stack exchange,提问作者devlooper
相关产品推荐
相关产品推荐

