Я хочу добавить в этот файл 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
Как мне определить существующую коллекцию
Set items = JSON("root")(1)("STATUS_RESPONSE")("RESULT")Похожая вещь, которую я сделал, - это просто JSON ("root") (1) ("STATUS_RESPONSE") ("RESULT"). Добавьте myItem, который добавил его к объекту результата внизу
Кроме того, есть идеи, что внутри этого «ПОЛЬЗОВАТЕЛЯ» было больше ключей и значений, которые я не изменяю в Excel, как я могу их добавить?
Если вы хотите модифицировать существующего пользователя, который сильно отличается от добавления нового: вам нужно будет перебрать коллекцию объектов USER и определить, какой из них необходимо обновить.
Я имел в виду, что у моего исходного пользователя было два поля ниже LANGUAGE, например, вызываемые, FNAME и LNAME, но я не изменяю их в excel, как я могу перенести эти два в новый объект USER, который я только что создал под ним
Вы думали о том, чтобы перевести все поля в Excel?
У меня есть, так было бы проще, но мне было интересно, есть ли способ сделать это без того, чтобы тоже?
У вас уже есть загруженный объект JSON, и вы знаете, как получить доступ к существующим ключам, поэтому прочтите существующий объект пользователя и добавьте ключи и значения вашему новому пользователю.
Вам нужно клонировать коллекцию, скопировав каждый элемент из оригинала в цикле и вставив новый элемент в нужную позицию, а затем назначив новый клонированный объект вместо оригинала.
@TimWilliams, как мне получить доступ к ключу, я знаю, как делать значения, но для ключа я не могу его понять
For each k in JSON("root")(1)("STATUS_RESPONSE")("RESULT")(1)("USER"): debug.print k, JSON("root")(1)("STATUS_RESPONSE")("RESULT")(1)("USER")(k)Это просто дает мне значения для каждой вещи внутри, а не ключи
k - это имя ключа, а [path_here](k) - значение.
Взгляните на этот ответ, чтобы узнать, помогает ли это

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