VBAでJSON形式の文字列をパースする方法 回答する


#VBA

現在、VBAでWeb APIを叩く処理を書いています。

そのWeb APIはJSON形式でレスポンスを返すのですが、それを簡単にパースする方法はないでしょうか?

例えば、次のようなレスポンスだった場合

{
  "index": 0,
  "guid": "f1349c97-af4c-404d-90fd-a33a998e05d0",
  "isActive": true,
  "balance": "$3,042.22",
  "picture": "http://placehold.it/32x32",
  "age": 38,
  "eyeColor": "brown",
  "name": "Frances Crosby",
  "gender": "female",
  "company": "MAGNINA",
  "email": "francescrosby@magnina.com",
  "phone": "+1 (838) 531-3393",
  "address": "599 Clinton Avenue, Kidder, Federated States Of Micronesia, 8643",
  "about": "Ullamco aute deserunt elit adipisicing sunt nisi quis irure occaecat exercitation esse. Esse excepteur ea est aute quis sint nisi quis aliqua officia. Enim deserunt duis sunt in ut cillum deserunt aute ullamco magna incididunt. Excepteur adipisicing minim culpa fugiat sunt.\r\n",
  "registered": "2017-12-10T06:49:32 -09:00",
  "latitude": -1.602688,
  "longitude": -84.420106,
  "friends": [
    {
      "id": 0,
      "name": "Bobbie Ayala"
    },
    {
      "id": 1,
      "name": "Dina Butler"
    },
    {
      "id": 2,
      "name": "Effie Le"
    }
  ],
  "greeting": "Hello, Frances Crosby! You have 6 unread messages.",
  "favoriteFruit": "banana"
}

friendsの一番目の要素のname属性をこんな感じで取得したいです。

res.friends[0].name

よろしくお願いいたします。

orion 2019.02.11 00:26:41 13757

orion 2019.02.11 00:31:04
ちなみに上のJSONはダミーです。

コメントする

コメントするには ログイン していただく必要があります。

回答 1

こんにちは、Excel Beer運営です。ご投稿ありがとうございます。

VBAでJSON文字列をパースするには、ScriptControlを通じて、JScriptを利用するのが良いかと思います。

次に「res.friends[0].name」の値を取得するための、サンプルコードをお示しいたします。

(A1セルに上述のJSON文字列が含まれていることを前提にしています。)

Option Explicit

Sub ReadJsonTest()
    ' A1セルからJSON文字列を取得
    Dim str: str = Range("A1").Value

    ' JSON文字列をデシリアライズ(JScriptを利用)
    Dim json: Set json = ParseJson(str)

    ' JSONのres.friends[0].name要素を表示
    MsgBox CallByName(CallByName(CallByName(json, "friends", VbGet), 0, VbGet), "name", VbGet)
End Sub

Function ParseJson(str)

  Dim scriptControl: Set scriptControl = CreateObject("ScriptControl")
  scriptControl.Language = "JScript"
  scriptControl.AddCode "function Parse(str) { return eval('(' + str + ')'); };"
  Dim json: Set json = scriptControl.CodeObject.Parse(str)

  Set ParseJson = json
End Function

記事にもさせていただきました。
https://excel.beer/excel/vba/string/parse-json

excelbeer 2019.02.21 12:08:48 (2019.04.23 23:22:04 更新)

orion 2019.03.24 11:56:37
ありがとうございます。うまくいきました!

コメントする

コメントするには ログイン していただく必要があります。

回答する
質問に回答するには ログイン していただく必要があります。
一覧に戻る