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 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック