You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 17:15:02