Как выбрать узлы JSON, указанные в таблице Excel для каждого поля? - PullRequest
0 голосов
/ 08 декабря 2018

Привет, я новичок в VBA и JSON.Я хочу проанализировать сценарий JSON с помощью макроса VBA.

У меня уже есть таблица Excel с каждым полем и соответствующим ей путем JSON.

При попытке выбрать значение из таблицы Excel оно читается как строка, а кавычки добавляются в начало и конец строки.Кавычки " в начале и конце пути переменной JSON делают невозможным считывание значения из сценария JSON.

Например, если путь равен project->name, расположение вТаблица Excel составляет ("project")("name").Но после прочтения в VBA оно становится "("project")("name")".С дополнительными кавычками " в пути местоположение не идентифицируется в коде VBA.

{
    "quiz": {
        "sport": {
            "name": "Basketball",
            "Questions":{
                "question1": "Which one is correct team name in NBA?",
                "question2":"Who is your favorite player",}
                   }
                    }
                     }

Для этого сценария JSON я создал таблицу Excel с путями вопросов1 и вопрос2:

  • ("викторина") ("спорт") ("имя") ("вопрос1")
  • ("викторина") ("спорт") ("имя") («question2»)

Следующий код запускает цикл и сначала определяет путь к question1 и возвращает «Какой из команд является правильным в NBA?»и сделайте то же самое для question2 .Но item (path) возвращает пустую строку, в то время как запись полного пути в коде возвращает правильное значение.

Set jsonObject = JsonConverter.ParseJson(JsonScript) 'Parse Json from GitHub

For Each item In jsonObject("data")      
    For i = 1 To nrow ' loops through rows with path for each field
       Path = ws2.Range("C" & i).Value 'path of each field
       MsgBox item(Path) 'returns Empty
       question1 = item("quiz")("sport")("name")("question1") 'returns question1 value:Which one is correct team name in NBA?  
    Next   
Next

1 Ответ

0 голосов
/ 08 декабря 2018

Вы не можете применять таким образом, особенно с ().Вы можете указать пути в виде списка элементов пути, разделенных запятыми (без пробелов), и выполнить следующие действия.Вам также необходимо удалить дополнительные "," после игрока.

Примечание. Я проверяю UBound массива, сгенерированного разбиением на "," строки, считанной с листа и содержащейся в массиве (arr) с текущим индексом i.Это гарантирует, что я применяю вложенный синтаксис записи для получения требуемого значения.

Я не уверен, откуда вы получаете "data".Я не вижу этого в предоставленной строке.Вы измените в соответствии с вашим фактическим JSON, если отличается.


Данные:

enter image description here


Выход:

enter image description here


VBA:

Option Explicit
Public Sub GetInfoFromSheet()
    Dim json As Object, jsonSource  As String, paths(), i As Long, ws As Worksheet, arr() As String
    Set ws = ThisWorkbook.Worksheets("Sheet1")

    jsonSource = ws.[C1]

    Set json = JsonConverter.ParseJson(jsonSource)
    paths = Application.Transpose(ws.Range("A1:A3").Value)

    For i = LBound(paths) To UBound(paths)
        arr = Split(paths(i), ",")
        Select Case UBound(arr)
        Case 2
            Debug.Print json(arr(0))(arr(1))(arr(2))
        Case 3
            Debug.Print json(arr(0))(arr(1))(arr(2))(arr(3))
        End Select
    Next i
End Sub

Строка JSON в C1:

{ "quiz": { "sport": { "name": "Basketball", "Questions":{ "question1": "Which one is correct team name in NBA?", "question2":"Who is your favorite player"} } } }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...