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

Azure DevOps YAML Pipeline输出变量丢失JSON开头括号问题

解决Azure DevOps Pipeline中JSON数组丢失开头[的问题

问题根源

Azure DevOps的##vso[task.setvariable]命令在处理多行格式化JSON时,容易因日志换行或命令解析逻辑,导致数组开头的[被截断。PowerShell默认生成的带缩进换行的JSON,会放大这类解析异常的概率。

解决方案

1. 强制生成数组并压缩为单行JSON

修改脚本中生成JSON和设置变量的代码,用-AsArray确保输出是数组格式,同时通过-Compress将JSON压缩为单行,避免换行引发的解析问题:

# 强制转为数组格式,单元素场景也能生成[]包裹的JSON
$roleAssignmentsJson = ConvertTo-Json -InputObject $roleAssignments -AsArray -Compress
# 输出变量命令
Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]$roleAssignmentsJson"

2. 验证变量传递正确性

在后续任务中添加调试步骤,确认变量内容是否完整:

- task: PowerShell@2
  displayName: Debug RoleAssignmentsObject
  inputs:
    targetType: 'inline'
    script: |
      Write-Host "RoleAssignmentsObject content: $(RoleAssignmentsObject)"
      try {
        $assignments = ConvertFrom-Json -InputObject "$(RoleAssignmentsObject)"
        Write-Host "JSON转换成功"
      } catch {
        Write-Error "转换失败: $_"
      }

3. 确保$roleAssignments为数组类型

在脚本中提前校验并强制转换类型,避免单元素场景下ConvertTo-Json不生成数组结构:

# 非数组类型强制转为数组
if (-not $roleAssignments -is [array]) {
  $roleAssignments = @($roleAssignments)
}

额外处理方案

如果单行压缩仍有问题,可尝试用单引号包裹JSON字符串后传递:

Write-Host "##vso[task.setvariable variable=RoleAssignmentsObject]'$roleAssignmentsJson'"

后续转换时去除首尾单引号即可:

$assignments = ConvertFrom-Json -InputObject "$(RoleAssignmentsObject)".Trim("'")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 04:17:47