簡體   English   中英

使用 VBScript 解析 JSON 文件 - QTP/UFT

[英]Parse JSON file using VBScript - QTP/UFT

我正在使用 QTP/UFT 來自動化我的 UI 應用程序。 我想將 UI 值與來自 REST API 響應的值進行比較。 我是 VBScript 的新手,我已經編寫了調用 REST API 並獲得響應的方法,但我正在嘗試找到如何使用 VBScript 解析 JSON 的解決方案。

請幫助我如何解析 json 響應? (下面的代碼)或者是否更容易接受 xml 中的 REST 響應並在 VBS 中解析它?

感謝您的幫助和想法。 謝謝!

userName    =   "abc@xyz.com"
password    =   "blah.123"
acctNumber  =   "01999994201"

URL1="https://CXaic-blah.blah.ocp.blah.com:243/ic/api/integration/v1/flows/rest/blah_ACCNTSEARCH/1.0/accountSearch?accountNumber=" 
URL=URL1&acctNumber
Set objXmlHttpMain = CreateObject("Msxml2.ServerXMLHTTP") 
on error resume next 
objXmlHttpMain.open "GET",URL, False , userName, password
objXmlHttpMain.setRequestHeader "Accept", "application/json"
objXmlHttpMain.setRequestHeader "charset", "UTF-8"
objXmlHttpMain.send

restjsonresp    =   objXmlHttpMain.responseText

以下是我得到的 json 響應的格式:

{ 
   "searchResponse":{ 
      "element":[ 
         { 
            "accType":"R",
            "accountNumber":"1111111",
            "accountStatus":"A",
            "taxId":""
         }
      ]
   }
}

雖然我沒有 QTP/UFT 來測試或驗證以下代碼,但我按原樣提供了這些 JSON 解析解決方案用於實驗......

1) 將 JScript 塊注入“htmlfile”對象

Dim y, html : Set html = CreateObject("htmlfile")
Dim window : Set window = html.parentWindow
window.execScript "var json=" & restjsonresp & ";var e=new Enumerator(json.searchResponse.element);", "JScript"
While Not window.e.atEnd()
    Set y = window.e.item()
    Print "acctType: " & y.accType
    Print "accountNumber: " & y.accountNumber
    Print "accountStatus: " & y.accountStatus
    Print "taxId: " & y.taxId
    window.e.moveNext
Wend

2)使用“MSScriptControl.ScriptControl”調用JScript代碼(需要32位

Dim x, eng : Set eng = CreateObject("MSScriptControl.ScriptControl")
eng.Language = "JScript"
eng.AddCode "function json() { return " & restjsonresp & "; }"
Dim oResp : Set oResp = eng.Run("json")
For Each x In oResp.searchResponse.element
    Print "acctType: " & x.accType
    Print "accountNumber: " & x.accountNumber
    Print "accountStatus: " & x.accountStatus
    Print "taxId: " & x.taxId
Next

3) 將 JScript 塊注入“InternetExplorer.Application”(矯枉過正?性能命中

Dim z, objIE : Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate2 "about:blank"
objIE.Toolbar = False
objIE.StatusBar = False
objIE.MenuBar = False
Do While objIE.Busy
    Wait 1
Loop
objIE.Visible = False
objIE.document.open "text/html"
objIE.document.write "<script type='text/javascript'>document.json=" & restjsonresp & ";document.jsonEnum = new Enumerator(document.json.searchResponse.element);</script>"
objIE.document.close
While Not objIE.document.jsonEnum.atEnd()
    Set z = objIE.document.jsonEnum.item()
    Print "acctType: " & z.accType
    Print "accountNumber: " & z.accountNumber
    Print "accountStatus: " & z.accountStatus
    Print "taxId: " & z.taxId
    objIE.document.jsonEnum.moveNext
Wend
objIE.Quit

4) 使用 Demon 的 VbsJson 對象(純 VBScript 解決方案;盡管有更多代碼

https://github.com/eklam/VbsJson

5) 使用正則表達式(僅用於簡單的、定義良好的 JSON 響應

Dim re : Set re = New RegExp
re.IgnoreCase = True
re.Pattern = "\{\s*""searchResponse""\s*\:\s*\{\s*""element""\s*\:\s*\[\s*(\{\s*""accType""\s*\:\s*""(.*)""\s*,\s*""accountNumber""\s*\:\s*""(.*)""\s*,\s*""accountStatus""\s*\:\s*""(.*)""\s*,\s*""taxId""\s*\:\s*""(.*)""\s*\})\s*\]\s*\}\s*\}"
If re.Test(restjsonresp) Then
    Dim matches : Set matches = re.Execute(restjsonresp)
    Print "acctType: " & matches(0).SubMatches(1)
    Print "accountNumber: " & matches(0).SubMatches(2)
    Print "accountStatus: " & matches(0).SubMatches(3)
    Print "taxId: " & matches(0).SubMatches(4)
End If

6) 將 JSON 轉換為 XML,然后解析 XML(大量代碼,潛在的矯枉過正

https://github.com/pravynandas/JSONToXML

如果您可以控制響應,並提供 XML 而不是 JSON,那么最好在 QTP/UFT 中堅持使用 XML for VBScript。 無論如何,我希望這里的東西是有幫助的。

享受。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM