Excel VBA调用接口时部分接口返回值双引号被转义问题
VBA调用API时响应文本双引号被重复转义的问题
问题描述
使用MSXML2.XMLHTTP60对象调用多个API接口,核心调用代码如下:
req.Open "GET", url, False req.setRequestHeader "Content-type", "application/json" req.setRequestHeader "Accept", "application/json" req.setRequestHeader "Authorization", "Bearer " & sessionId req.send
其中一个接口返回的响应文本req.responseText中,所有双引号均被转义为\",示例响应如下:
[[{\"PK__REVFLAGID\":null,\"grp\":\"Implementation Tracking\",\"flag\":\"Green\",\"FLAG_DESCRIPTION\":null}]]
该问题仅在VBA环境中出现,Postman、PHP或cURL调用同一接口时,响应文本的双引号显示正常。
可能的原因与解决方法
- 模拟标准User-Agent
MSXML2.XMLHTTP60的默认User-Agent与Postman、浏览器等工具不同,部分接口会针对特定UA做额外的JSON转义处理。可手动设置User-Agent模拟其他工具:
req.setRequestHeader "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
- 手动反转义处理
若接口无法调整,可在获取响应后手动替换转义的双引号:
Dim cleanResponse As String cleanResponse = Replace(req.responseText, "\""", """") ' 后续使用cleanResponse进行JSON解析或其他操作
检查响应Content-Type
确认接口返回的Content-Type是否为application/json,若返回text/plain,MSXML可能不会自动解析转义字符。可通过req.getResponseHeader("Content-Type")查看,若类型不符,可尝试强制按JSON格式处理响应。替换为ServerXMLHTTP对象
部分场景下,MSXML2.ServerXMLHTTP60的解析行为与XMLHTTP60不同,可替换对象尝试:
Public req As New MSXML2.ServerXMLHTTP60
内容的提问来源于stack exchange,提问作者TechFanDan
相关产品推荐
相关产品推荐

