Добавление в существующий JSON из excel

Я хочу добавить в этот файл JSON в excel с помощью vba.

Итак, у меня есть этот файл JSON

{
    "root": [{
        "STATUS_RESPONSE": {
            "STATUS": {
                "STATUS": {
                    "OWNER": "root"
                }
            },
            "REQ_ID": "00000",
            "RESULT": [{
                "USER": {
                    "BUSINESS_ID": "A",
                    "USER_NUMBER": "45",
                    "LANGUAGE": "F"
                }
            },
            {
                "USER_SESSION": {
                    "USER_ID": "0000001009",
                    "HELP_URL": "http://google.com"
                }
            },
            {
                "USER_ACCESS": {
                    "SERVICES_ROLE": "true",
                    "JOURNALLING": "true"

                }
            }]
        }
    }]
}

Я хочу добавить еще одного «ПОЛЬЗОВАТЕЛЯ» прямо под ним, чтобы он выглядел как

{
    "root": [{
        "STATUS_RESPONSE": {
            "STATUS": {
                "STATUS": {
                    "OWNER": "root"
                }
            },
            "REQ_ID": "00000",
            "RESULT": [{
                "USER": {
                    "BUSINESS_ID": "A",
                    "USER_NUMBER": "45",
                    "LANGUAGE": "F"
                }
            },
            {     
                 "USER": {
                    "BUSINESS_ID": "B",
                    "USER_NUMBER": "55",
                    "LANGUAGE": "E"
                }
            },
            {
                "USER_SESSION": {
                    "USER_ID": "0000001009",
                    "HELP_URL": "http://google.com"
                }
            },
            {
                "USER_ACCESS": {
                    "SERVICES_ROLE": "true",
                    "JOURNALLING": "true"

                }
            }]
        }
    }]
}

Это то, что у меня есть сейчас

Private Sub CommandButton3_Click()
Dim z As Integer, items As New Collection, myitem As New Dictionary
Dim rng As Range
Dim cell As Variant
Dim FSO As New FileSystemObject
Dim JsonTS As TextStream
Set JsonTS = FSO.OpenTextFile("test.json", ForReading)
JsonText = JsonTS.ReadAll
JsonTS.Close
Set JSON = ParseJson(JsonText)

Set rng = Range("A5")

z = 0
For Each cell In rng
    myitem("BUSINESS_ID") = cell.Offset(0, 1).Value
    myitem("USER_NUMBER") = cell.Offset(0, 2).Value
    myitem("LANGUAGE") = cell.Offset(0, 3).Value
    items.Add myitem
    Set myitem = Nothing
z = z + 1
Next

myfile = Application.ActiveWorkbook.Path & "\test.json"
Open myfile For Output As #1
Print #1, ConvertToJson(myitem, Whitespace:=2)
MsgBox ("Exported to JSON file")
Close #1

End Sub

Все, что он делает, это добавляет его под существующий JSON и не связан со всем этим.

Как мне добавить еще одного «ПОЛЬЗОВАТЕЛЯ» прямо под текущим с информацией из Excel

Вы создаете проанализированный объект JSON (который вам нужно изменить), но затем ничего не делаете с ним. В этом объекте "РЕЗУЛЬТАТ" уже существует коллекция, поэтому добавьте к ней каждый myItem. И вы не можете установить myItem в ничего, если вы перебираете более одной строки, или как вы добавите следующий элемент?

Tim Williams 08.06.2018 18:40

Как мне определить существующую коллекцию

Kevin Jones 08.06.2018 19:35
Set items = JSON("root")(1)("STATUS_RESPONSE")("RESULT")
Tim Williams 08.06.2018 20:13

Похожая вещь, которую я сделал, - это просто JSON ("root") (1) ("STATUS_RESPONSE") ("RESULT"). Добавьте myItem, который добавил его к объекту результата внизу

Kevin Jones 08.06.2018 20:19

Кроме того, есть идеи, что внутри этого «ПОЛЬЗОВАТЕЛЯ» было больше ключей и значений, которые я не изменяю в Excel, как я могу их добавить?

Kevin Jones 08.06.2018 20:21

Если вы хотите модифицировать существующего пользователя, который сильно отличается от добавления нового: вам нужно будет перебрать коллекцию объектов USER и определить, какой из них необходимо обновить.

Tim Williams 08.06.2018 20:24

Я имел в виду, что у моего исходного пользователя было два поля ниже LANGUAGE, например, вызываемые, FNAME и LNAME, но я не изменяю их в excel, как я могу перенести эти два в новый объект USER, который я только что создал под ним

Kevin Jones 08.06.2018 20:32

Вы думали о том, чтобы перевести все поля в Excel?

Tim Williams 08.06.2018 20:53

У меня есть, так было бы проще, но мне было интересно, есть ли способ сделать это без того, чтобы тоже?

Kevin Jones 08.06.2018 20:56

У вас уже есть загруженный объект JSON, и вы знаете, как получить доступ к существующим ключам, поэтому прочтите существующий объект пользователя и добавьте ключи и значения вашему новому пользователю.

Tim Williams 08.06.2018 21:03

Вам нужно клонировать коллекцию, скопировав каждый элемент из оригинала в цикле и вставив новый элемент в нужную позицию, а затем назначив новый клонированный объект вместо оригинала.

omegastripes 08.06.2018 21:23

@TimWilliams, как мне получить доступ к ключу, я знаю, как делать значения, но для ключа я не могу его понять

Kevin Jones 08.06.2018 21:26
For each k in JSON("root")(1)("STATUS_RESPONSE")("RESULT")(1)("USER"): debug.print k, JSON("root")(1)("STATUS_RESPONSE")("RESULT")(1)("USER")(k)
Tim Williams 08.06.2018 21:28

Это просто дает мне значения для каждой вещи внутри, а не ключи

Kevin Jones 08.06.2018 21:32
k - это имя ключа, а [path_here](k) - значение.
Tim Williams 08.06.2018 21:38

Взгляните на этот ответ, чтобы узнать, помогает ли это

PeterT 08.06.2018 22:25
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
16
176
0

Другие вопросы по теме