2017-06-08 27 views
0

Webリクエスト(http://www.coincap.io/history/365day/BTC)で返された多次元JSON配列があります。私は2番目のエントリを循環し、そのネストされた値を取得したい。JSON応答のネストされた配列の値にアクセスする

これは通常の配列だった場合、私が使用したい:market_cap、価格、および数量:

For Each item In response 
    logic, logic, logic 

    currentRow = currentRow + 1 
Next 

をこのWeb要求は3つのエントリでJSONレスポンスを返します。私はちょうどresponse(1)を通って循環し、価格値を得たいと思う。 priceの各エントリには、2つのキー、01が含まれています。

私はまたFor Each item in response("price")考えられてきた

For Each item in response(1) 
    Cells(currentRow, 1).Value = item(0) 
    Cells(currentRow, 2).Value = item(1) 

    currentRow = currentRow + 1 
Next 

をすることによって、これを達成できることを想像。どちらも動作しません。

+0

「応答」オブジェクトの取得方法を正確に表示/記述してください。 JSON解析ライブラリ/クラスを使用していますか?はい、どちらの場合ですか?いいえの場合....?少なくともあなたが持っている限り、それを得るために働くコードセットを提供すれば、フォークがあなたを助けるのはずっと簡単です。 –

答えて

1
Sub Tester() 

    Dim json As String 
    Dim sc As Object 
    Dim o, n, i, p 

    Set sc = CreateObject("scriptcontrol") 
    sc.Language = "JScript" 

    json = HttpGet("http://www.coincap.io/history/365day/BTC") 

    sc.Eval "var obj=(" & json & ")" 'evaluate the json response 
    'add a couple of accessor functions 
    sc.AddCode "function numPrices(){return obj.price.length;}" 
    sc.AddCode "function getPrice(i){return obj.price[i];}" 

    n = sc.Run("numPrices") 
    For i = 0 To n - 1 
     p = Split(sc.Run("getPrice", i), ",") 
     Debug.Print i, p(0), p(1) 
    Next i 

End Sub 

Function HttpGet(url As String) As String 
    Dim oHTML As Object 
    Set oHTML = CreateObject("Microsoft.XMLHTTP") 
    With oHTML 
     .Open "GET", url, False 
     .send 
     HttpGet = .responsetext 
    End With 
End Function 
関連する問題