2017年01月22日

vbscript:IEを使って64bit環境でJSONをパース

vba/vbscriptでJSONをパースするにはScriptControlを使うのが手っ取り早くていいんだけど、64bit環境だとScriptControlが使えないから困る。何か代わりはないかと思ってたらIEが使えることに気づいた。
※vbscriptで試したけど64bit officeのvbaでも使えると思う。
って書いた後に"HtmlFile"なるものを使うとIEを起動しなくてもHTMLDocumentを使えるということを知ってもっと簡単になった。
Dim doc, jsn
'HTMLDocumentを取得
Set doc = CreateObject("HtmlFile")
'scriptタグを追加
doc.write "<script>document.JsonParse=function (s) {return eval('(' + s + ')');}</script>"
'パース関数でJSONオブジェクトを取得
Set jsn = doc.JsonParse("{a:1,b:2}")
WScript.Echo jsn.b
※ただパースは何も問題ないけど、不思議なことに JSON.stringify を使おうとしたらダメだった。(JSONオブジェクト自体がダメっぽい)

IEを使うパターンは折角書いてたし、こっちは JSON.stringify も使えるからこれはこれで残しとく。
Dim ie, n, jsn
'IEを起動
Set ie = CreateObject("InternetExplorer.Application")
'ie.Visible = True
'空画面を開く
ie.Navigate "about:blank"
Do While ie.Busy Or ie.ReadyState <> 4
WScript.Sleep 100
Loop
ie.document.body.innerHTML = "JsonParse用"
'JSONをパースする関数のscriptタグを動的に作成
Set n = ie.document.createElement("script")
n.Text = "document.JsonParse=function (s) {return eval('(' + s + ')');}"
ie.document.body.appendChild n
'パース関数でJSONオブジェクトを取得
Set jsn = ie.document.JsonParse("{a:1,b:2}")
WScript.Echo jsn.b
'IEを閉じる
ie.Quit
posted by 忘却の達人 at 09:39| Comment(0) | TrackBack(0) | vba | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。