PowerShell脚本Invoke-RestMethod JSON转义错误排查求助
Azure DevOps WIQL API调用JSON转义错误排查方案
错误根源分析
报错Bad JSON escape sequence: \A是因为请求体JSON中存在非法转义序列。JSON仅允许特定转义字符(如\b、\t、\n、\"、\\等),\A不属于合法转义项,问题出在WIQL查询字符串的转义处理上——PowerShell字符串解析与JSON序列化的双重转义规则冲突,导致最终生成的JSON包含非法序列。
排查步骤
定位WIQL中的转义字符
检查脚本内WIQL语句,确认是否包含\A这类非JSON标准转义字符,通常是正则表达式写法错误或PowerShell字符串转义处理不当导致。输出并检查JSON请求体
在调用Invoke-RestMethod前,先输出序列化后的JSON内容,确认是否存在非法转义:$body = @{ query = "你的WIQL查询语句" } | ConvertTo-Json Write-Host $body若输出中出现
\A,则直接定位到转义处理错误。
修复与调试方案
修正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 ^.*'
- 若WIQL需使用
使用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启用调试模式验证请求
调用Invoke-RestMethod时添加-Debug参数,查看实际发送的请求体细节:Invoke-RestMethod -Uri $azureDevOpsUri -Method Post -Body $body -Headers $authHeaders -Debug校验JSON合法性
用PowerShell内置命令验证生成的JSON是否合规:Test-Json -Json $body返回
True则JSON合法,否则会提示具体错误位置。
内容的提问来源于stack exchange,提问作者Mike S
相关产品推荐
相关产品推荐

