需要帮助,使用VBA跳过空的json数组

时间:2019-04-02 20:17:05

标签: arrays json vba parsing

我正在遍历不同的进程ID,以访问json中的数据并将其复制到我的电子表格中。但是,某些进程ID不包含任何数据,每次我的代码进入这些空数组时,我都会得到一个错误。我尝试了if语句的不同变体来跳过此步骤,但仍然收到错误。空数组位于“ expectedRateSetList”

我尝试了不同的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 个答案:

答案 0 :(得分:1)

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")是等效的。