VBA Json - это действительно дешевый (и эффективный) преобразователь / распаковщик строки json во вложенный набор словарей и сборников.Так что вам не нужно "деконструировать [ваш] файл в словари / сборники и перестраивать его" , поскольку ... он уже есть.Вот почему необходимо добавить библиотеку Microsoft Scripting Runtime, чтобы использовать ее.
Проблема, с которой вы сталкиваетесь, заключается в том, что вы рассматриваете каждый объект в вашем json
объекте как словарь.Вместо этого вы хотите add
(pop) в коллекцию entries
.Хороший способ сохранить это отдельно - это то, что в VBA JSON (насколько я видел), если объект является парой ключ / значение, тогда это Dictionary
, а если это просто объект без key
, тогда этоCollection
.Я уверен, что здесь есть больше нюансов, но он хорошо работает в этом сценарии.
Учтите:
Sub test()
Dim Json As Object
Set Json = JsonConverter.ParseJson("[{""Entries"":[{""Date"": 2019-09-25,""a"": 1,""b"": 2}]}]")
Dim entry1 As Object
Set entry1 = Json(1)("Entries")
Stop '<--inspect Locals and see that we have a Collection here
'Add to the collection (different then adding to a dictionary)
'We will add a dictionary to the collection though
Json(1)("Entries").Add New Dictionary
'Now add to the dictionary.
Json(1)("Entries")(2).Add "Date", "2019-09-26"
Stop
Debug.Print JsonConverter.ConvertToJson(Json)
'Alternatively you could create the dictionary and add your keys, then `pop` your entries
Dim Entry As Dictionary
Set Entry = New Dictionary
Entry.Add "Date", "2019-09-26"
Entry.Add "a", "2"
Entry.Add "b", "3"
Json(1)("Entries").Add Entry
Debug.Print JsonConverter.ConvertToJson(Json)
End Sub
Это должно выплевывать то, что вы ищете (я думаю):
[{"Entries":[{"Date":"2019-09-25","a":1,"b":2},{"Date":"2019-09-26"}]}]
Думаю, еще один способ обдумать это - если мы хотим добавить новый массив в наш Entries
, то мы должны добавить новый объект Dictionary
в коллекцию Entries
.Затем мы можем добавить в словарь наши пары ключ / значение, такие как Date
, a
и b
.