3

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

2
  • What about myNest = "{""new_key"":{""value"":1,""foo"":""bar""}}" Commented Feb 28, 2018 at 15:43
  • 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") Commented Feb 28, 2018 at 15:47

2 Answers 2

12

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"}]}
Sign up to request clarification or add additional context in comments.

Comments

5

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"

2 Comments

I just noticed I maybe mis-read your required output: @xuanhai266's solution is a better match.
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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.