QTP/UFT自动化中如何用VBScript解析REST API的JSON响应?
解析REST API响应:JSON vs XML 在VBScript中的实现方案
嘿,作为VBScript新手碰到JSON解析的问题太正常了——毕竟VBScript本身没有原生的JSON处理能力,不过别担心,咱们有两种靠谱的方案可以选,我给你一步步讲清楚:
方案一:解析JSON响应
因为VBScript没有内置JSON解析器,咱们可以借助ScriptControl对象调用JScript的JSON.parse方法来处理,这是最常用的变通方案。
具体代码实现
在你已有的代码基础上,添加这段解析逻辑:
' 拿到JSON响应后,开始解析 Set sc = CreateObject("ScriptControl") sc.Language = "JScript" ' 用JScript的JSON.parse把字符串转成可访问的对象 ' 转义单引号避免解析出错 Set jsonObj = sc.Eval("JSON.parse('" & Replace(restjsonresp, "'", "\'") & "')") ' 现在可以像访问对象属性一样获取值 ' 示例:取第一个element里的账号和账号类型 accountNumFromAPI = jsonObj.searchResponse.element(0).accountNumber accTypeFromAPI = jsonObj.searchResponse.element(0).accType ' 测试输出 MsgBox "API返回的账号:" & accountNumFromAPI MsgBox "账号类型:" & accTypeFromAPI
方案二:切换到XML响应(更简便的选择)
如果你觉得JSON解析的步骤有点绕,切换到XML响应确实会更省心——VBScript对XML的支持是原生的,用Msxml2.DOMDocument就能轻松处理,不需要额外依赖,尤其适合新手。
具体代码实现
- 首先修改请求头,把
Accept改成application/xml:
' 替换原有的Accept请求头 objXmlHttpMain.setRequestHeader "Accept", "application/xml"
- 发送请求后,用DOMDocument解析XML响应:
' 加载XML响应 Set xmlDoc = CreateObject("Msxml2.DOMDocument.6.0") xmlDoc.async = False xmlDoc.loadXML(objXmlHttpMain.responseText) ' 用XPath获取对应节点的值(XML结构和JSON对应) accountNumFromAPI = xmlDoc.SelectSingleNode("//searchResponse/element/accountNumber").Text accTypeFromAPI = xmlDoc.SelectSingleNode("//searchResponse/element/accType").Text ' 测试输出 MsgBox "API返回的账号:" & accountNumFromAPI MsgBox "账号类型:" & accTypeFromAPI
两种方案的对比
- JSON方案:响应格式更简洁,但需要依赖
ScriptControl,部分受严格安全限制的环境可能禁用这个对象; - XML方案:VBScript原生支持,稳定性更高,代码更直观,适合你这种VBScript新手,尤其在QTP/UFT的环境里,XML处理也是常用技能。
结合你的情况,我更推荐用XML方案,上手更快,踩坑更少~
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

