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

如何在Bash脚本中动态更新变量内JSON字段的值?

在Bash脚本中更新JSON变量的baseUrl字段

问题背景

你通过以下命令将API返回的JSON数据存储到data变量中:

data=$(curl -s --location --request GET "${HOST}/api/v1/envs/projects/${PROJECT_ID}?page=0&pageSize=25" --header "Accept: application/json" --header "Content-Type: application/json" --header "Authorization: Bearer "$token"" | jq -r '.data[]')

输出的JSON结构如下:

{
  "id": "8aa0809085f46e000185f4c28b7a0b52",
  "createdBy": "8aa0808e82fd01fb0182fd0b05820007",
  "createdDate": "2023-01-27T19:44:28.538+0000",
  "modifiedBy": "8aa0808e82fd01fb0182fd0b05820007",
  "modifiedDate": "2023-01-27T19:45:14.811+0000",
  "version": null,
  "inactive": false,
  "projectId": "8aa0809085f46e000185f4c28b760b51",
  "name": "Master",
  "refId": "Master",
  "description": null,
  "baseUrl": "http://petstore.swagger.io/v1"
}

需要动态更新baseUrl字段,并将更新后的完整JSON保存到变量中用于后续操作。

解决方案

使用jq工具(Bash处理JSON的标准工具)来修改字段,步骤如下:

1. 修正原数据存储命令(可选但推荐)

原命令中jq -r '.data[]'会将JSON对象转为无格式的文本输出,建议保留完整JSON结构,方便后续处理:

# 获取数组中的第一个JSON对象(如果接口返回多个对象,可根据需求调整)
data=$(curl -s --location --request GET "${HOST}/api/v1/envs/projects/${PROJECT_ID}?page=0&pageSize=25" \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $token" | jq '.data[0]')

2. 更新baseUrl字段

定义新的baseUrl值,通过jq的--arg参数传递变量(避免字符串转义问题),生成更新后的JSON:

# 定义新的baseUrl
new_base_url="https://your-new-api-domain.com/v2"

# 生成更新后的JSON,保存到新变量
updated_data=$(echo "$data" | jq --arg new_url "$new_base_url" '.baseUrl = $new_url')

# 或者直接覆盖原变量
# data=$(echo "$data" | jq --arg new_url "$new_base_url" '.baseUrl = $new_url')

3. 验证结果

执行以下命令查看更新后的JSON:

echo "$updated_data"

4. 批量更新数组中所有对象的baseUrl(如果需要)

如果原接口返回的是多个环境对象的数组(data变量存储的是JSON数组),可以用map函数批量更新:

# 获取完整的data数组
data=$(curl ... | jq '.data')

# 批量更新所有对象的baseUrl
updated_data=$(echo "$data" | jq --arg new_url "$new_base_url" 'map(.baseUrl = $new_url)')

注意事项

  • 确保系统已安装jq工具,可通过apt install jq(Debian/Ubuntu)或yum install jq(CentOS/RHEL)安装。
  • 使用--arg传递变量是最安全的方式,避免手动拼接JSON时出现引号或特殊字符转义错误。

内容的提问来源于stack exchange,提问作者devops-admin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 18:52:36