ExcelのVBAでJSON形式のデータを取り扱う場合の注意点をメモ
基本よく使われるパターンとして「JScript」を活用した関数を作成してパースするといった形になると思います。この形は一般的によく紹介されている方法です。
Function ParseJson(strJSON As String) As Object
Dim strFunc As String
Dim js As Object
Set js = CreateObject("ScriptControl")
js.Language = "JScript"
strFunc = "function jsonParse(s) { return eval('(' + s + ')'); }"
js.AddCode strFunc
Set ParseJson = js.CodeObject.jsonParse(strJSON)
End Function
今回この関数を利用してパースしたJSONデータをループで取り出す際、非常に処理時間が掛かることが発覚しました。約5,000レコードで10分以上かかりました。厳密に言うと、パース後の配列ネスト処理が非常に遅いです。
別の方法でJSON形式のパースができないかと調査した結果、「VBA-JSON」というライブラリを使用したところ処理速度は大幅に改善されました。
もし処理時間が遅いといったケースがあれば「VBA-JSON」を試してみるとよいかもしれません。
GitHubに最新版のソースがあります。
– -> https://github.com/VBA-tools/VBA-JSON
コメント