2017-07-14 82 views
1

這是一個快速和骯髒的POC我有其他有用的堆棧職位至今:解析JSON/XML參數

Public Function WebRequest(url As String) As String 
    Dim http As MSXML2.xmlhttp 
    Set http = CreateObject("MSXML2.ServerXMLHTTP") 

    http.open "GET", url, False 
    http.send 

    WebRequest = http.responseText 
    Set http = Nothing 
End Function 

Private Sub Command1_Click() 

Dim http As MSXML2.xmlhttp 
    Dim result As String 
    Dim url As String 
    Dim productId As String 

    productId = "2" 
    url = "http://localhost:1111/api/products/" & productId 
    result = WebRequest(url) 

    MsgBox result 

End Sub 

這需要一個簡單的Web API和收益預期。響應內容如下:

{"Id":2,"Name":"Yo-yo","Category":"Toys","Price":3.75} 

將參數分配給變量以在應用程序的其餘部分中使用的最佳方式是什麼?

+0

爲什麼在這裏使用'CreateObject()'而不是'New'? – Bob77

+0

@ Bob77我很快就複製了這個答案:https://stackoverflow.com/a/27854657/7896203我從來沒有使用VB6之前,所以我不能回答這個問題說實話。 – Reed

回答

2

解析JSON沒有「最好」的方法,但有幾個現有的VB6類來這樣做。 VB6或Windows中沒有任何內容可以使用,所以沒有任何明顯的選擇可以首先實現。

如果你不想使用現有的VB6類或第三方庫,那麼你可以「手動」使用自己的代碼進行解析。只要你期望的JSON非常簡單,可能就是你所需要的。

這裏有很多陷阱,但它是否適合你的非常簡單的例子,只要沒有其他數據類型的使用,弦從來沒有引號或轉義符號等:

Option Explicit 

Private Sub Main() 
    Const SIMPLE_JSON As String = _ 
     "{""Id"":2,""Name"":""Yo-yo"",""Category"":""Toys"",""Price"":3.75}" 
    Dim JsonItems() As String 
    Dim Collection As Collection 
    Dim I As Long 
    Dim Parts() As String 
    Dim Value As Variant 

    JsonItems = Split(Mid$(SIMPLE_JSON, 2, Len(SIMPLE_JSON) - 2), ",") 
    Set Collection = New Collection 
    For I = 0 To UBound(JsonItems) 
     Parts = Split(JsonItems(I), ":") 
     Parts(0) = Mid$(Parts(0), 2, Len(Parts(0)) - 2) 
     If Left$(Parts(1), 1) = """" Then 
      Value = Mid$(Parts(1), 2, Len(Parts(1)) - 2) 
     Else 
      Value = Val(Parts(1)) 
     End If 
     Collection.Add Array(Parts(0), Value), Parts(0) 
    Next 

    With Collection 
     For I = 1 To .Count 
      Debug.Print .Item(I)(0); "="; .Item(I)(1) 
     Next 
    End With 
End Sub 

結果:

Id= 2 
Name=Yo-yo 
Category=Toys 
Price= 3.75 

Val()函數用於非字符串值,因爲它是區域設置盲(始終使用不變的區域設置,應始終格式化JSON數字)。

+0

感謝您的幫助!我認爲這不會很直接,但這是迄今爲止我最好的資源!我將不得不進一步瞭解正在改進的傳統服務中使用的數據類型。謝謝! – Reed