【EXCEL VBA】JSONのKey一覧を取得したい

JSONのKey一覧を取得する方法を紹介します。JavaScriptでいうところのObject.keys()に相当します。

今回は以下のようなJSONを準備しました。Key一覧を取得するので、key1 , key2, key3,・・・key10が取得できれば良いことになります。

{
  "key1": "value1",
  "key2": "value2",
  "key3": "value3",
  "key4": "value4",
  "key5": "value5",
  "key6": "value6",
  "key7": "value7",
  "key8": "value8",
  "key9": "value9",
  "key10": "value10"
}

JSONのValue一覧が取得したい場合は以下記事を参考にしてください

事前準備

JSONパーサーを自前で準備するのは大変なので、VBA-JSONを利用します。設定方法は以下の記事を参照してください。

KeysとFor Each Inで解決する

JSONパーサは、JSON文字列をDictionary型(またはCollection型)に変換します。Dictionary型のKey一覧取得と同様な方法を利用することができます。Key一覧取得の場合は、For Each Inを利用することになります。

サンプログラム(コピペでOK)

記載方法は2つあります。方法1の方が速度が速いです。ただし、処理数が数十件ならば誤差で、10万件以上処理をする場合に考慮が必要なレベルです。可読性を重要視するならば方法2ですね。ご自身の環境に応じて選択してください。

Option Explicit

Sub sample()
    Dim jsonStr As String
    jsonStr = "{""key1"":""value1"",""key2"":""value2"",""key3"":""value3"",""key4"":""value4"",""key5"":""value5"",""key6"":""value6"",""key7"":""value7"",""key8"":""value8"",""key9"":""value9"",""key10"":""value10""}"

    Dim jsonObj As Object
    Set jsonObj = JsonConverter.ParseJson(jsonStr)
    
    Dim k As Variant        ' For Each に渡す変数は、必ずVariant型
    
    ' 方法1
    For Each k In jsonObj
        Debug.Print k
    Next
    
    ' 方法2
    For Each k In jsonObj.Keys
        Debug.Print k
    Next
    
    Debug.Print "キーの数:" & jsonObj.Count   ' キーの数はCount変数で取得できます

End Sub