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

如何在Bash中将JSON字符串嵌入另一JSON以生成合法结构

合法拼接混合类型变量生成JSON的方案

错误原因

你原来的写法存在两个核心问题:

  1. 已经是合法JSON结构的ADDITIONAL_PARAMS变量被额外套了一层双引号,导致JSON结构嵌套错误
  2. 纯手动拼接字符串没有自动转义逻辑,只要变量中存在双引号、空格、换行等特殊字符,必然会生成非法JSON

推荐方案1:使用jq生成(Azure流水线默认环境预装)

jq是专门处理JSON的命令行工具,会自动处理所有转义规则,是生成JSON的最优选择:

# 生成合法JSON字符串
EXTRA_VARS=$(jq -n \
  --arg var_type "$TYPE" \
  --arg var_color "$COLOR" \
  --argjson var_additional_data "$ADDITIONAL_PARAMS" \
  '{$var_type, $var_color, $var_additional_data}')

# 调用目标脚本
some_script --extra-vars "$EXTRA_VARS"

参数说明:

  • --arg 用于传入普通字符串类型变量,jq会自动为其加双引号、处理转义
  • --argjson 用于传入已经是合法JSON格式的变量,jq会直接保留其原有结构

推荐方案2:使用你已安装的yq生成

如果你更习惯用yq,也可以通过YAML中转生成合法JSON:

# 生成合法JSON字符串
EXTRA_VARS=$(yq -o json -n \
  --arg var_type "$TYPE" \
  --arg var_color "$COLOR" \
  --argjson var_additional_data "$ADDITIONAL_PARAMS" \
  '.var_type = $var_type | .var_color = $var_color | .var_additional_data = $var_additional_data')

# 调用目标脚本
some_script --extra-vars "$EXTRA_VARS"

特殊场景:必须手动拼接的注意事项(极度不推荐)

仅当你确认所有变量都不存在双引号、换行等特殊字符时可以用,核心是不要给JSON类型的变量套双引号:

some_script --extra-vars '{"var_type": "'"$TYPE"'", "var_color": "'"$COLOR"'", "var_additional_data": '"$ADDITIONAL_PARAMS"'}'

内容的提问来源于stack exchange,提问作者prosto.vint

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:48:00