如何在Bash中将JSON字符串嵌入另一JSON以生成合法结构
合法拼接混合类型变量生成JSON的方案
错误原因
你原来的写法存在两个核心问题:
- 已经是合法JSON结构的
ADDITIONAL_PARAMS变量被额外套了一层双引号,导致JSON结构嵌套错误 - 纯手动拼接字符串没有自动转义逻辑,只要变量中存在双引号、空格、换行等特殊字符,必然会生成非法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
相关产品推荐
相关产品推荐

