我正在遍历不同的进程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"}
答案 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")
是等效的。