使用jq从JSON取值时,将元素替换为变量后无法正常获取值的问题
问题原因
jq的点操作符仅支持字面量字段名,无法直接识别.$k这种变量拼接的写法,要使用动态变量作为字段索引,必须使用.[$变量名]的方括号索引语法,这也是报错提示里明确建议的try .["field"] instead of .field的用法。
修复后的核心代码
把循环里的jq调用改成如下写法即可:
for key in $keys do value=$(echo $data | jq --arg k "$key" '.[$k].value') final_value="${final_value}${key}: ${value}" done
完整优化版脚本(简化冗余逻辑)
原有的key提取逻辑可以合并,不需要重复调用jq,完整可运行版本如下:
data=$(cat <<EOF { "my_db_instance_class": { "sensitive": false, "type": "string", "value": "db.t3.medium" }, "my_db_instance_test": { "sensitive": false, "type": "string", "value": "db.t4.medium" } } EOF ) # 一次性提取所有key,直接输出原始值不带多余引号 keys=$(echo "$data" | jq -r 'keys[]') final_value="" for key in $keys do value=$(echo "$data" | jq --arg k "$key" -r '.[$k].value') final_value="${final_value}\"${key}\": \"${value}\"" done echo $final_value
运行后输出完全符合预期:
"my_db_instance_class": "db.t3.medium""my_db_instance_test": "db.t4.medium"
内容的提问来源于stack exchange,提问作者kumar
相关产品推荐
相关产品推荐

