Excel+VBAでJsonデータを取得する。

ExcelのVBAから、Jsonデータを取得(MongoDB使ってるとか)する場合
以下の様にするとサーバーから取得できる。

Private Function LoadJSONFromDB() As String
   
    Dim XMLhttp As Object
    Set XMLhttp = CreateObject("MSXML2.ServerXMLHTTP")
    XMLhttp.Open "GET", "http://localhost/get/json", False
    XMLhttp.setrequestheader "Content-Type", "application/json"
    XMLhttp.send
    
    LoadJSONFromDB = XMLhttp.responseText
    
End Function

JsonのパースはScriptControlを使うやり方があります。

http://symfoware.blog68.fc2.com/blog-entry-579.html

が!!

このやり方は64bitの環境では使えないのです。

色々考えたけど…。
もうJsonとか普通にパースしようぜ!!

とは言え、1から組むのも面倒くさいので
以下で公開されてるコード使えば手っ取り早いと思います。

https://code.google.com/p/vba-json/issues/attachmentText?id=15&aid=150001000&name=jsonlib.cls&token=5OWlmJQUrDRpilvRsiL0Ggkq96Y%3A1351421534157


ついでに、上記のコードで取得したオブジェクトをDumpするコードを置いておきます。

Private Sub DumpJSONObj(ByRef json As Variant)
    
    If TypeName(json) = "Dictionary" Then
        Call DumpDictionaly(json)
    ElseIf TypeName(json) = "Collection" Then
        Call DumpCollection(json)
    Else
        Debug.Print "value:" & json
    End If
    
    
End Sub

Public Sub DumpCollection(ByRef dic As Variant)
    Dim keys
    Dim i
    For i = 0 To dic.Count - 1
        Debug.Print "ArrayNo:" & i
        Call DumpJSONObj(dic.Item(i + 1))
    Next i
End Sub

Public Sub DumpDictionaly(ByRef dic As Variant)
    Dim keys
    Dim i
    keys = dic.keys
    For i = 0 To dic.Count - 1
        Dim key
        key = keys(i)
        Debug.Print "key:" & key
        Call DumpJSONObj(dic.Item(key))
    Next i
End Sub