通过 VBA 解析 Json 数组

Par*_*ran 5 macos excel vba

我从一个 api 得到一个 json 响应并解析它以在 excel 中更新。下面是代码。我无法进一步解析以获取价格信息。

Dim strResult As String
Dim objHTTP As Object
Dim URL As String
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
URL = "https://bitbns.com/order/getTickerAll"
objHTTP.Open "GET", URL, False
objHTTP.Send
Set JSON = JsonConverter.ParseJson(objHTTP.ResponseText)
'strResult = objHTTP.ResponseText
'MsgBox JSON(1)("BTC")("sellPrice")
baseCol = 9
buyCol = 10
sellCol = 11
i = 1
Dim keyCurr As String
For Each Item In JSON
    ActiveSheet.Cells(i + 2, baseCol).Value = Item.Keys
    i = i + 1
Next
Run Code Online (Sandbox Code Playgroud)

热心的帮助。正如您在上面的评论中看到的那样,我能够以硬编码方式获取数据

MsgBox JSON(1)("BTC")("sellPrice")
Run Code Online (Sandbox Code Playgroud)

但是当我尝试让它循环时,我无法做到。以下是我尝试过但没有奏效的方法。

ActiveSheet.Cells(i + 2, baseCol).Value = JSON(i)(Item.Keys)("sellPrice") 
ActiveSheet.Cells(i + 2, baseCol).Value = JSON(i)(" + Item.Keys + ")("sellPrice")
ActiveSheet.Cells(i + 2, baseCol).Value = JSON(i)(Item(0))("sellPrice")
ActiveSheet.Cells(i + 2, baseCol).Value = JSON(i)(Item(1))("sellPrice")
Run Code Online (Sandbox Code Playgroud)

为了解析 JSON,我使用vbaJSON库。它似乎返回了正确的对象(可以看到我能够访问硬编码方式,但无法在循环中访问)

更新:根据 Vityata 的提示,下面的代码似乎工作正常。谢谢大家这么直接的帮助。:)

For Each Item In JSON
    ActiveSheet.Cells(i + 2, baseCol).Value = Item.Keys
    For Each curr In Item
        ActiveSheet.Cells(i + 2, buyCol).Value = JSON(i)(curr)("buyPrice")
        ActiveSheet.Cells(i + 2, sellCol).Value = JSON(i)(curr)("sellPrice")
        i = i + 1
    Next curr
Next Item
Run Code Online (Sandbox Code Playgroud)

Vit*_*ata 3

如果你硬编码“sellPrice”,你可以想出这样的东西:

Dim something, someItem, cnt&
For Each something In JSON
    For Each someItem In something
        cnt = cnt + 1
        Debug.Print someItem
        Debug.Print JSON(cnt)(someItem)("sellPrice")
    Next someItem
Next something
Run Code Online (Sandbox Code Playgroud)

在立即窗口中:

BTC
 623900 
XRP
 70,35 
NEO
 7699,5 
GAS
 2848,97 
ETH
 59500 
XLM
 28,38 
Run Code Online (Sandbox Code Playgroud)

键和项都是集合,可以循环遍历:

Dim something, someItem, cnt&, obj, iO
For Each something In JSON
    For Each someItem In something
        cnt = cnt + 1
        Debug.Print someItem
        Set obj = JSON(cnt)(someItem)
        For Each iO In obj.Keys
            Debug.Print iO
            Debug.Print obj.item(iO)
        Next iO
    Next someItem
Next something
Run Code Online (Sandbox Code Playgroud)

在立即窗口中:

BTC
sellPrice
 625000 
buyPrice
 624000 
lastTradePrice
 625000 
XRP
sellPrice
 70,2 
buyPrice
 70,1 
lastTradePrice
 70,2 
Run Code Online (Sandbox Code Playgroud)