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

PowerShell脚本Invoke-RestMethod JSON转义错误排查求助

Azure DevOps WIQL API调用JSON转义错误排查方案

错误根源分析

报错Bad JSON escape sequence: \A是因为请求体JSON中存在非法转义序列。JSON仅允许特定转义字符(如\b、\t、\n、\"、\\等),\A不属于合法转义项,问题出在WIQL查询字符串的转义处理上——PowerShell字符串解析与JSON序列化的双重转义规则冲突,导致最终生成的JSON包含非法序列。

排查步骤

  1. 定位WIQL中的转义字符
    检查脚本内WIQL语句,确认是否包含\A这类非JSON标准转义字符,通常是正则表达式写法错误或PowerShell字符串转义处理不当导致。

  2. 输出并检查JSON请求体
    在调用Invoke-RestMethod前,先输出序列化后的JSON内容,确认是否存在非法转义:

    $body = @{
        query = "你的WIQL查询语句"
    } | ConvertTo-Json
    Write-Host $body
    

    若输出中出现\A,则直接定位到转义处理错误。

修复与调试方案

  1. 修正WIQL字符串转义

    • 若WIQL需使用\A(.NET正则中表示字符串开头),需在PowerShell字符串中将\写为双反斜杠\\,确保JSON序列化后生成合法的\\A(对应WIQL解析后的\A):
      # 单引号字符串(推荐,避免PowerShell自动解析转义)
      $query = 'SELECT * FROM WorkItems WHERE [System.Title] MATCHES \\A.*'
      # 双引号字符串需额外转义
      $query = "SELECT * FROM WorkItems WHERE [System.Title] MATCHES \\\\A.*"
      
    • 若误将正则行开头符^写成\A,可直接替换为^,避免转义问题:
      $query = 'SELECT * FROM WorkItems WHERE [System.Title] MATCHES ^.*'
      
  2. 使用Here-String处理复杂WIQL
    对于长查询或含多个特殊字符的WIQL,用PowerShell Here-String避免转义混乱:

    $query = @'
    SELECT * FROM WorkItems 
    WHERE [System.Title] MATCHES '\\A.*'
      AND [System.State] = 'Active'
    '@
    $body = @{ query = $query } | ConvertTo-Json
    
  3. 启用调试模式验证请求
    调用Invoke-RestMethod时添加-Debug参数,查看实际发送的请求体细节:

    Invoke-RestMethod -Uri $azureDevOpsUri -Method Post -Body $body -Headers $authHeaders -Debug
    
  4. 校验JSON合法性
    用PowerShell内置命令验证生成的JSON是否合规:

    Test-Json -Json $body
    

    返回True则JSON合法,否则会提示具体错误位置。

内容的提问来源于stack exchange,提问作者Mike S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 19:47:05