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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 17:45:37