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

动态添加Jobs和Steps时Shell脚本Dynamo JSON格式化报错

排查DynamoDB JSON生成的语法错误

错误原因分析

你遇到的Expecting ',' delimiter错误,本质是手动拼接JSON时出现了语法问题,最常见的场景包括:

  • 最后一个job或step后面多了逗号
  • 字符串中包含未转义的特殊字符(比如双引号、反斜杠)
  • 变量中的空白字符(换行、制表符)破坏了JSON结构

快速排查步骤

  1. 输出并验证生成的JSON
    把脚本生成的JSON输出到文件,用jq工具检查语法:

    # 假设你的脚本是generate_json.sh
    ./generate_json.sh > output.json
    jq . output.json
    

    jq会直接指出具体的语法错误位置,比AWS CLI的提示更清晰。

  2. 检查逗号拼接逻辑
    手动循环生成job或step时,要确保最后一个元素后面没有多余的逗号。比如:

    • 初始化时标记第一个元素,后续元素前加逗号,而不是所有元素后加逗号
    • 错误示例:每个step后都加逗号,导致最后一个step后多了逗号,破坏数组结构
  3. 检查字符串转义
    如果job或step的名称/内容包含双引号、反斜杠,必须转义为\"或\\。比如:

    • 错误写法:{"name": "job "test""}
    • 正确写法:{"name": "job \"test\""}

推荐解决方案:用jq生成JSON

手动拼接JSON极易出错,建议用jq工具动态生成,它会自动处理语法转义、逗号拼接等问题。示例脚本:

# 定义jobs的数据源(可以从文件或变量读取)
jobs=()
jobs+=('{"name": "数据同步任务", "steps": [{"action": "拉取数据"}, {"action": "清洗数据"}]}')
jobs+=('{"name": "备份任务", "steps": [{"action": "快照生成"}, {"action": "上传S3"}]}')

# 用jq组合成符合DynamoDB要求的JSON结构
final_json=$(jq -n --argjson jobs "$(printf '%s\n' "${jobs[@]}" | jq -s .)" '{jobs: $jobs}')

# 验证JSON语法
echo "$final_json" | jq .

# 执行AWS CLI命令
aws dynamodb put-item --table-name your-table-name --item "$final_json"

手动拼接的正确示例(不推荐)

如果必须手动拼接,严格控制逗号和转义:

# 初始化JSON结构
json='{"jobs": ['

# 处理jobs数组
first_job=true
for job_name in "任务1" "任务2"; do
  # 非第一个job前加逗号
  if [ "$first_job" = false ]; then
    json+=','
  fi
  first_job=false

  # 处理当前job的steps
  step_json='{"name": "'"$job_name"'", "steps": ['
  first_step=true
  for step_action in "步骤A" "步骤B"; do
    if [ "$first_step" = false ]; then
      step_json+=','
    fi
    first_step=false
    # 转义step中的特殊字符(如果有)
    escaped_step=$(printf '%s' "$step_action" | sed 's/"/\\"/g')
    step_json+='{"action": "'"$escaped_step"'"}'
  done
  step_json+=']}'

  json+="$step_json"
done

# 闭合JSON结构
json+=']}'

# 验证后执行命令
echo "$json" | jq .
aws dynamodb put-item --table-name your-table-name --item "$json"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:35:12