业务中用到vba解析json/xml,这里进行总结笔记。
1.发送请求function
Public Function sendReq(ByRef URL As String) As String
On Error GoTo err6
Dim HttpReq As MSXML2.XMLHTTP60
Dim ResponseStr As String
'XMLHTTPオブジェクトをセット
Set HttpReq = New MSXML2.XMLHTTP60
With HttpReq
.Open "GET", URL, varAsync:=False '非同期モードで通信を開始
.send 'リクエストを送信
If .Status <> 200 Then Exit Function 'リクエストが成功しなかったら終了
End With
ResponseStr = HttpReq.responseText
sendReq = ResponseStr
Set HttpReq = Nothing
Exit Function
err6:
Set HttpReq = Nothing
MsgBox message_box("ERROR_204")
End
End Function
2.解析Json
Function GoogleMap(ByVal adress As String) As String
'GoogleMaps API json形式でジオコードを取得
'戻り値:緯度(glat),経度(glng),ステータスをカンマ区切り
Dim URL As String
Dim objJSON As Object
Dim strGeocode As String
'Google Maps Geocoding API
URL = "https://maps.googleapis.com/maps/api/geocode/json?address=" & UrlEncodeUtf8(adress)
jsonText = sendReq(URL)
Dim gStatus As String
Dim glat As String
Dim glng As String
Dim glocation_type As String
Dim gGeometry As Object
Dim gLocation As Object
Dim gItem As Variant
Dim gCount As Long
Set js = CreateObject("ScriptControl")
js.Language = "JavaScript"
'jsonにパースする関数を追加
js.AddCode "function jsonParse(s) { return eval('(' + s + ')'); }"
'追加した関数を実行して、結果を変数に格納する
Set objJSON = js.CodeObject.jsonParse(jsonText)
'ステータス コード(status)を取得する
gStatus =