VBA-JSON Create nested objects

12,204

Solution 1

You can use Dictionary and Collection in VBA. After that convert them to Json. This is an example:

Sub test()
    Dim c As Collection
    Dim d As Dictionary
    Dim e As Dictionary
    Dim f As Dictionary
    Dim json As String

    Set c = New Collection
    Set d = New Dictionary
    Set e = New Dictionary
    Set f = New Dictionary

    d.Add "value", 1
    e.Add "foo", "bar"
    c.Add d
    c.Add e
    f.Add "new_key", c

    json = JsonConverter.ConvertToJson(ByVal f)

    Debug.Print json
End Sub

And this is output:

{"new_key":[{"value":1},{"foo":"bar"}]}

Solution 2

Something like this:

Set Json = JsonConverter.ParseJson("{}")
'or
'Set Json = CreateObject("scripting.dictionary")

Json.Add "new_key", CreateObject("scripting.dictionary")
Json("new_key")("value") = 1
Json("new_key")("foo") = "bar"
Share:
12,204
drec4s
Author by

drec4s

Teaching is the best way to learn.

Updated on June 13, 2022

Comments

  • drec4s
    drec4s almost 2 years

    I have seen a lot of examples showing how to parse json strings with VBA-JSON, however I would like to know how to create a JSON object from scratch using this library.

    I have started with:

    Set Json = JsonConverter.ParseJson("{}")
    Json("key") = "value"
    

    And this works as expected.

    However, if I want to create a nested object, for example:

    Json("new_key")(1)("value") = 1
    Json("new_key")(2)("foo") = "bar"
    

    Does not output the expected: {"new_key":[{"value": 1}, {"foo": "bar"}]}

    Is this possible to achieve with this library? Or is there another way to do it?

    Thanks

    • BruceWayne
      BruceWayne about 6 years
      What about myNest = "{""new_key"":{""value"":1,""foo"":""bar""}}"
    • drec4s
      drec4s about 6 years
      Does not seem to do it...it will map the key to a string, and gives an error when trying to access individual values as Json("new_key")("value")
  • Tim Williams
    Tim Williams about 6 years
    I just noticed I maybe mis-read your required output: @xuanhai266's solution is a better match.
  • drec4s
    drec4s about 6 years
    Yes, but in fact all I really wanted was to understand the creation of a new nested key, and this line Json.Add "new_key", CreateObject("scripting.dictionary") did the trick.