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

如何在Bash脚本中为JSON文件批量填充单值与多值字段?

用jq填充JSON模板的单值字段与数组字段

1. 先定义脚本变量

在Bash脚本里声明需要填充的变量,包括单值和数组:

APP_ID="12345"
APP_NAME="MyDemoApp"
# 多值数组变量
GROUPS=("admin_group" "editor_group" "viewer_group")
INCLUSION=("/api/v1/*" "/web/*")

2. 单值字段赋值

对于.appId、.appName这类单值字段,用--arg将Bash变量传递给jq,避免字符串转义问题,直接用=运算符赋值:

jq --arg app_id "$APP_ID" \
   --arg app_name "$APP_NAME" \
   '.appId = $app_id | .appName = $app_name' payload.json

3. 多值数组字段赋值

数组字段需要先把Bash数组转成jq能识别的JSON数组格式,再用--argjson传递:

# 将Bash数组转为JSON数组字符串
GROUPS_JSON=$(printf '%s\n' "${GROUPS[@]}" | jq -R . | jq -s .)
INCLUSION_JSON=$(printf '%s\n' "${INCLUSION[@]}" | jq -R . | jq -s .)

4. 整合所有赋值逻辑

把单值和数组的赋值整合到一个jq命令里,输出到新的JSON文件(也可以直接覆盖原文件):

jq --arg app_id "$APP_ID" \
   --arg app_name "$APP_NAME" \
   --argjson groups "$GROUPS_JSON" \
   --argjson inclusion "$INCLUSION_JSON" \
   '.appId = $app_id | .appName = $app_name | .groups = $groups | .inclusion = $inclusion' payload.json > updated_payload.json

完整脚本示例

#!/bin/bash

# 定义变量
APP_ID="12345"
APP_NAME="MyDemoApp"
GROUPS=("admin_group" "editor_group" "viewer_group")
INCLUSION=("/api/v1/*" "/web/*")

# 转换Bash数组为JSON数组
GROUPS_JSON=$(printf '%s\n' "${GROUPS[@]}" | jq -R . | jq -s .)
INCLUSION_JSON=$(printf '%s\n' "${INCLUSION[@]}" | jq -R . | jq -s .)

# 填充JSON模板
jq --arg app_id "$APP_ID" \
   --arg app_name "$APP_NAME" \
   --argjson groups "$GROUPS_JSON" \
   --argjson inclusion "$INCLUSION_JSON" \
   '.appId = $app_id | .appName = $app_name | .groups = $groups | .inclusion = $inclusion' payload.json > updated_payload.json

# 可选:发送更新后的JSON到API
curl -X POST -H "Content-Type: application/json" -d @updated_payload.json https://your-api-endpoint.com

关键注意事项

  • 必须用--arg(字符串类型)或--argjson(JSON格式)传递变量,不要直接在jq里拼接Bash变量,避免转义错误和注入风险
  • 如果数组元素包含特殊字符(引号、斜杠等),jq -R .会自动处理转义,生成合法的JSON数组
  • 若要直接覆盖原文件,可安装moreutils后用| sponge payload.json替代输出到新文件的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 05:35:18