Нужна помощь, пропуская пустой массив JSON с VBA - PullRequest
0 голосов
/ 02 апреля 2019

Я перебираю различные идентификаторы процессов, чтобы получить доступ к данным в json и скопировать их в мою электронную таблицу.Однако некоторые идентификаторы процесса не содержат данных, и каждый раз, когда мой код попадает в эти пустые массивы, я получаю сообщение об ошибке.Я пробовал разные варианты операторов if, чтобы пропустить это, но все равно получаю ошибку.Пустой массив находится по адресу "pectedRateSetList "

. Я пробовал разные варианты операторов if, чтобы пропустить это, но все равно получаю ошибку.Я пробовал «Если J - ноль, если J - ничто, Если J - пусто» и т. Д., Но я все еще не могу заставить его работать. Я также пробовал «При ошибке перейти к», но это не сработало.

    `````````````
    For l = 2 To last_row(tb, 2)

    Set J = setJSON(url)
    Set J = CallByName(J, "expectedRateSetList", VbGet)  <---This is the array that is empty        
    If J Is Null Then GoTo next_log
    On Error GoTo next_log
    Set J = CallByName(J, "0", VbGet)   
    Set J = CallByName(J, "expectedRateList", VbGet)
    next_log:
    Next l
'json array looks like this:
{"processId":X,"expectedRateSetList":[],"warehouseId":"warehouseX"}

1 Ответ

1 голос
/ 03 апреля 2019

J определенно не массив.J - это объект, скорее всего, Dictionary.Вы можете проверить, содержит ли словарь какие-либо элементы, запросив его свойство Count - это устраняет необходимость в метке строки и GoTo прыжке за счет увеличения вложенности (но тогда тело цикла, вероятно, должно быть преобразовано в егов любом случае, собственная процедура):

    If J.Count > 0 Then
        ' there are items
    End If
Next

Обратите внимание, что CallByName(J, "MemberName", vbGet) можно заменить поздними связанными J.MemberName вызовами - но опять же при условии, что ваш синтаксический анализ не производится вручную, а вы получить вложенные словари, это будет J("MemberName");свойство, которое вы фактически вызываете, является свойством (по умолчанию) Items: J.Items("MemberName") эквивалентно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...