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

如何将JSON对象的键值对存入Bash关联数组?

如何将JSON对象转换为Bash关联数组

问题分析

你之前的jq命令报错是因为操作顺序错误:先执行to_entries将整个JSON结构转为数组后,再试图用字符串.deploymentEnvs索引数组,而数组仅支持数字索引,因此触发Cannot index array with string "deploymentEnvs"错误。

解决方法

需要先定位到目标JSON对象deploymentEnvs,再将其转为键值对条目,最后结合Bash的while循环填充关联数组。

完整实现代码

# 初始化Bash关联数组
declare -A deployenvs

# 通过jq解析JSON,并用循环填充数组
while read -r key value; do
    deployenvs["$key"]="$value"
done < <(jq -r '.deploymentEnvs | to_entries[] | "\(.key) \(.value)"' deploy.json)

# 可选:验证数组内容
for key in "${!deployenvs[@]}"; do
    echo "deployenvs[$key]=${deployenvs[$key]}"
done

关键部分说明

  1. jq命令解析

    • .deploymentEnvs:先定位到JSON中的目标对象
    • to_entries[]:将对象转换为键值对条目(例如{"key":"dev","value":"zone_dev"})
    • "\(.key) \(.value)":将每个条目格式化为空格分隔的字符串,方便Bash读取
  2. while循环逻辑

    • read -r key value:读取jq输出的每一行,将空格分隔的两个字段分别存入变量key和value
    • 进程替换< <(...):将jq的输出作为循环的输入,避免子shell导致数组无法被外部访问

验证效果

执行上述代码后,关联数组deployenvs会被正确填充,输出验证内容将和你期望的结果一致:

deployenvs[dev]="zone_dev"
deployenvs[test]="zone_test"
deployenvs[prod]="zone_prod"

内容的提问来源于stack exchange,提问作者mdailey77

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:41:04