ADO Pipeline YAML传递JSON字符串至Python脚本时转义异常问题
解决Azure DevOps Pipeline传递JSON参数到Python脚本的转义异常问题
问题原因
你遇到的第一个键前引号被错误转义的问题,本质是Azure DevOps参数渲染与shell命令传递环节的转义规则冲突:
- 你在YAML里用
'{\"PartitionKey\": \"test\", \"RowKey\":\"test1\"}'作为默认值,虽然echo ${{ parameters.dictionary }}能输出正确JSON,但当这个参数直接传递给Python脚本时,shell(比如Bash)在解析未正确包裹的字符串时,会对开头的转义引号产生错误解析,导致第一个双引号前的反斜杠被保留,而后续转义引号被正常处理。
解决方案
1. 修正YAML参数定义,避免冗余转义
YAML中用单引号包裹完整JSON字符串时,内部双引号不需要转义,直接写原始JSON即可:
parameters: - name: dictionary type: string default: '{"PartitionKey": "test", "RowKey":"test1"}'
如果JSON内容较长,也可以用YAML块标量语法,保证格式清晰且无转义问题:
parameters: - name: dictionary type: string default: | {"PartitionKey": "test", "RowKey":"test1"}
2. 传递参数时用双引号包裹,确保shell完整传递
在调用Python脚本的任务中,必须用双引号把参数括起来,避免shell拆分或错误解析字符串:
- task: Bash@3 inputs: targetType: 'inline' script: | python your_script.py --output_parameters "${{ parameters.dictionary }}"
3. 验证Python脚本的参数接收逻辑
确保你的Python脚本用argparse正确接收字符串参数,不要做额外的转义处理:
import argparse import json def main(): parser = argparse.ArgumentParser() parser.add_argument('--output_parameters', type=str, required=True) args = parser.parse_args() # 先打印原始参数确认格式 print("Received parameter:", args.output_parameters) # 解析JSON data = json.loads(args.output_parameters) print("Parsed JSON:", data) if __name__ == "__main__": main()
验证效果
修改后重新运行Pipeline,Python脚本的print输出应该会显示完整且正确的JSON字符串,json.loads也能正常解析,不会再触发JSONDecodeError。
内容的提问来源于stack exchange,提问作者Bondgirl
相关产品推荐
相关产品推荐

