Попытка получить определенные данные из API с помощью VBA-JSON.Получите ошибку: объект не поддерживает это свойство или метод здесь |Для каждого ключа в json.Keys.Пытаясь выяснить, почему.
Когда я пытаюсь "Для каждого ключа в json.Key", я получаю код ошибки в заголовке.Я знаю, что это потому, что defender_list является массивом, поэтому мне нужно определить объект, но я изо всех сил пытаюсь создать оператор For для объекта (если это то, что мне нужно сделать).Я взял часть «За каждый ключ», потому что знаю, что это неправильно.
Option Explicit
Public Sub WriteOutBattleInfo()
Dim headers(), r As Long, i As Long, json As Object, key As Variant, ws As Worksheet, defenderList As Object, monsterInfo As Object
Set ws = ThisWorkbook.Worksheets("Sheet3")
headers = Array("Username", "Avg BP", "Avg Level", "Opp. Address", "Player ID", "Catch Number", "Monster ID", "Type 1", "Type 2", "Gason Y/N", "Ancestor 1", "Ancestor 2", "Ancestor 3", "Class ID", "Total Level", "Exp", "HP", "PA", "PD", "SA", "SD", "SPD", "Total BP")
With CreateObject("MSXML2.XMLHTTP")
.Open "GET", "https://www.etheremon.com/api/ema_battle/get_rank_castles?v=8588587&trainer_address=0x2fef65e4d69a38bf0dd074079f367cdf176ec0de", False
.Send
Set json = JsonConverter.ParseJson(.ResponseText)("data")("defender_list") 'dictionary of dictionaries
End With
r = 2
ws.Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
Редактировать: пробовал это
Dim obj As Variant
Dim monsterInfo, obj2
Dim types, obj3
Dim ancestors, obj4
Dim totalBattleStats, obj5
For Each obj In json
Debug.Print obj("username")
Debug.Print obj("avg_bp")
Debug.Print obj("avg_level")
Debug.Print obj("player_id")
Set monsterInfo = obj("monster_info")
For Each obj2 In monsterInfo
Debug.Print obj2("create_index")
Debug.Print obj2("monster_id")
Set types = obj("types")
Debug.Print obj3("types")
Debug.Print obj2("is_gason")
Set ancestors = obj("ancestors")
Debug.Print obj4("ancestors")
Debug.Print obj2("class_ID")
Debug.Print obj2("total_level")
Debug.Print obj2("exp")
Set totalBattleStats = obj("total_battle_stats")
Debug.Print obj5("total_battle_stats")
Debug.Print obj2("total_bp")
Next obj
Cells.Select
Selection.Columns.AutoFit
End Sub
Я хочу получить специально из "defender_list".Каждое «имя пользователя» имеет 6 месяцев, связанных с ним.Самое главное, я хочу получить статистику от каждого из этих монов, но я перечислил все, что мне нужно, в заголовках =.Имена переменных для кода: «username», «avg_bp», «avg_level», «player_id», а затем в «monster_info» находятся «create_index», «monster» id »« types »(массив type1, type2),« is_gason"," ancestors "(предок массива 1,2,3)," class_id "," total_level "," exp ", total_battle_stats (массив hp, pa, pd, sa, sd, spd)," total_bp ".

Ожидаемый результат:

Где:
Имя пользователя- "username"
Avg BP - "avg_bp"
Avg Level - "avg_level"
Идентификатор игрока - "player_id"
Номер улова - "create_index"
Идентификатор монстра - идентификатор "monster""
Тип 1, Тип 2 -" типы "(массив тип1, тип2)
Гасон -" is_gason "
Предок 1, Предок 2, Предок 3 -" предки "(предок массива 1,2,3)
Идентификатор класса - "class_id"
Общий уровень - "total_level"
Exp - "exp"
HP, PA, PD, SA, SD, SPD - "total_battle_stats" (массив hp, pa, pd, sa, sd, spd)
Total BP - "total_bp"
Все после мнayer_ID в этом списке специфичен для mon.Каждое имя пользователя имеет 6 месяцев, что означает 6 строк на имя пользователя.То, что перед player_ID, можно просто повторить для строк 1-6, это не имеет значения.