VBAでparseしたJSONデータの要素を取得する方法
目次
Web APIを使っていると、リクエストに対するレスポンスデータがJSONデータってことが一般的だ。JSONデータはキーと値のペア、すなわち連想配列になっているわけだが、これをparseすることで、キーを指定すれば値を取り出すことが可能となる。別にparseしなくても欲しい値を取り出することできるが、難儀して自分で取り出す処理を作ることになる。有難いことに、どなたかがparse用のライブラリを作成してGitHubに公開しているので、使わせてもらう。
VBA-JSON(JSONデータparse用ライブラリ)の導入
まずはVBAでJSONデータをparseするためのライブラリをGitHubから落とす。以下サイトに移動する。
https://github.com/VBA-tools/VBA-JSON
図1の赤枠の「Code」→「Download ZIP」とクリックする。
ダウンロードされたファイルを解凍(展開)して、その中に含まれているJsonConverter.basを自身のVBAプロジェクトにインポートする。 また、先ほどのWebページの下部に記載されているように、参照設定に “Microsoft Scripting Runtime” を追加する。(図2の赤線参照) これにてparseする準備は完了。
JSONデータ構造の確認
次に本題のJSONデータからどうやってデータを取り出すか見ていく。サンプルデータとして次のデータを用意した。{";term1";:";abc";,";term2";:{";term3";:123,";term4";:";def";,";term5";:[456,{";term6";:";789";,";term7";:";012";}]}}
ただし、このままだと見栄えが悪く、データ構造が分かりにくい。この程度のデータならまだ読めるかもしれないが、実際にWeb APIが返してくるデータはもっとデータ量が多くて複雑なことがほとんどだ。
ネット上にはJSONデータを見栄えよく整形して表示するサイトがいくつかあるので、それを使ってデータ構造を確認するのが良い。データ構造を簡単につかむことができれば、プログラムを書くのも容易となる。
例えば、以下のサイトで整形したものが図3。
https://tools.m-bsys.com/development_tooles/json-beautifier.php
JSONデータを取得するサンプルコード
各値を取得するサンプルコードを以下に示そう。
|
|
5行目でライブラリを呼び出してJSONデータをparseしている。 7行目以降で、データの取得コードと、右側のコメントに出力結果を載せている。基本的には、キーを指定すれば値を取り出せることが分かると思う。 また、連想配列ではなく単純な配列から値を取り出す場合は、インデックス指定でのアクセスとなる。
連想配列に対して、キー指定でなくインデックス指定でも値を取り出すことは一応可能だ(26,27行目)。ただし、少し注意が必要。 25行目のようなコードは、term2の値が単純な配列の場合の書き方だ。しかしterm2の値は連想配列なので取得できない。インデックスを指定する場合は、26行目のようなitemsメソッドを使った方法になる。
このitemsメソッドの使い方も要注意で、items()(0)ではなくitems(0)と書いた場合は、図4のようなエラーとなる。
29行目以降のように、いったんバリアント型に代入すると配列として扱えるので、インデックス指定も割と容易になる。しかし、35行目のように子孫の値の状況によってはitemsメソッドを使うことになるので、インデックス指定は避けるのが無難だと思う。
参考動画
表示が小さいので、全画面表示にするなどして、できるだけ拡大した方が見やすいと思う。