InternetExplorer.Application 経由で JSON.parse を使用する方法 で、JSON 文字列をパースする方法は既にありますが、実用としてはプロパティを文字列段階で置換して、VB の予約語から排除する必要があります。その為に RegExp(VBScript.RegExp) を使用して _data をプロパティに付加します。
Sub ボタン1_Click() Dim objHttp As Object Dim strResult As String Dim objJSON As Object Dim lResolve As Long: lResolve = 60& * 1000 Dim lConnect As Long: lConnect = 60& * 1000 Dim lSend As Long: lSend = 60& * 1000 Dim lReceive As Long: lReceive = 60& * 1000 Set objHttp = CreateObject("Msxml2.ServerXMLHTTP") ' Livedoor のお天気情報(大阪) Call objHttp.Open("GET", "http://weather.livedoor.com/forecast/webservice/json/v1?city=270000", False) Call objHttp.setTimeouts(lResolve, lConnect, lSend, lReceive) Call objHttp.Send strResult = objHttp.responseText Set objReg = CreateObject("VBScript.RegExp") ' 全て置換 objReg.Global = True ' パターン : () はサブマッチの範囲 objReg.Pattern = """([^""]+)"":" ' $1 がサブマッチした文字列 strResult = objReg.Replace(strResult, """$1_data""" & ":") Set objJSON = Parse(strResult) Set objHttp = Nothing MsgBox objJSON.title_data & " | " & objJSON.description_data.text_data End Sub Function Parse(json As String) Dim doc As Object, result As Object Set Ie = CreateObject("InternetExplorer.Application") Ie.Navigate ("about:blank") Do While Ie.Busy ' 100 ミリ秒 Wscript.Sleep 100 Loop Set doc = Ie.document doc.write "<script>document.JSON_Parse=function(s) {return JSON.parse(s);}</script>" Set Parse = doc.JSON_Parse(json) Ie.Quit Set Ie = Nothing End Function
|
【VBAの最新記事】
- VBA : 一ヶ月の予定リストの作成して、csv を読み込んでデータを表示する
- Excel で 角丸四角形や1つの角を切り取った四角形で、角丸や切り取った長さを一定に設定する為の VBA Sub プロシージャ
- Excel の VBA : ブックを開いたら、フォームを表示してボタンをクリックしたらセルにデータをセットする
- VBA : Microsoft Access(.accdb) の読み込み
- VBA : シートの保護と部分的なセル入力の許可
- VBA : 挿入した『テキストボックス』にアクセスする
- VBA : InternetExplorer.Application 経由で JSON.parse を使用する方法
- VBA : FileSystemObject でテキストファイル(CSV) を読み込んでセルにセットする