Arrays 语法请求:";而";解析JSON字符串数组的语法(VBA)

Arrays 语法请求:";而";解析JSON字符串数组的语法(VBA),arrays,vba,Arrays,Vba,我正在努力让我的代码在JSON字符串数组(格式相同)中循环,直到它到达数组的末尾(即,没有剩下任何字符串)。我需要代码通过识别某个标识符(存在于每个集合中)在下一个数组中没有其他信息来识别它已到达终点。因此,我相信我正在寻找“while”语法,即“whilethisdidentifier havecontent”,根据下面的代码继续解析JSON。我现有的代码适用于我知道长度的字符串数组-不幸的是,长度是可变的,因此我需要灵活的语法来调整长度(即,“for 0 to n”并非每次都有效) 我正在解

我正在努力让我的代码在JSON字符串数组(格式相同)中循环,直到它到达数组的末尾(即,没有剩下任何字符串)。我需要代码通过识别某个标识符(存在于每个集合中)在下一个数组中没有其他信息来识别它已到达终点。因此,我相信我正在寻找“while”语法,即“whilethisdidentifier havecontent”,根据下面的代码继续解析JSON。我现有的代码适用于我知道长度的字符串数组-不幸的是,长度是可变的,因此我需要灵活的语法来调整长度(即,“for 0 to n”并非每次都有效)

我正在解析的JSON代码的格式如下:

{"id":1,"prices":[{"name":"expressTaxi","cost":{"base":"USD4.50","fareType":
"time_plus_distance","cancelFee":"USD10.00","minimumAmt":"USD8.00","perMinute":"USD1.50",
"perDistanceUnit":"USD3.00"}}] 
''note that this could have multiple arrays embedded. That is, from the "name" key to 
''the "perDistanceUnit" key would all repeat, with different value pairs. 
''The number of "name" to "perDistanceUnit" arrays is unknown. 
在这里,我想用某种类型的while循环(I是索引号,取决于尚未实现的while循环中的#of循环)

因此,理想情况下,寻找类似:

"While Json("prices")(i)("name") has information" then proceed on....
请再次注意,当我知道长度时,一切都会正常工作——只需寻找一个小的语法更新,谢谢!更新:完整代码如下:

Option Explicit

Sub getJSON()
sheetCount = 1
i = 1
urlArray = Array("URL1", “URL2”, “URL3”)

Dim MyRequest As Object: Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim MyUrls: MyUrls = urlArray
Dim k As Long
Dim Json As Object

For k = LBound(MyUrls) To UBound(MyUrls)
    With MyRequest
        .Open "GET", MyUrls(k)
        .Send
        Set Json = JsonConverter.ParseJson(.ResponseText)
       ''[where I’d like some type of While statement checking into the below line for content]
        Sheets("Sheet" & sheetCount).Cells(i, 1) = Json("prices")(i)("name")
        Sheets("Sheet" & sheetCount).Cells(i, 2) = Json("prices")(i)("cost")("base")
        i = i + 1
   End With
sheetCount = sheetCount + 1
Next
End Sub

我对您使用的库不太熟悉,但它似乎将对象(包含在
{}
中的项)转换为字典对象,将数组(包含在
[]
中的项)转换为集合

根据解析的JSON的结构,这些对象可能是嵌套的:即字典中的一个元素可能是集合(数组)

幸运的是,这两种对象类型都有一个
Count
属性,可以用来迭代它们(字典类型也有一个“keys”集合)

因此,要循环每个“价格”:


您需要显示现有代码,包括如何解析JSON@TimWilliams更新了上面的完整代码。
Debug.Print Json(“prices”).Count
应该告诉您有多少元素。也许你可以发布一个更大的JSON示例?@TimWilliams我添加了一个完整的JSON示例,并添加了附加上下文的注释。该示例中仍然没有任何内容可供循环:它只是
prices
中的一个对象,非常有用-谢谢你的帮助,@TimWilliams!现在我只需要将这些打印到正确的单元格/表格!
Option Explicit

Sub getJSON()
sheetCount = 1
i = 1
urlArray = Array("URL1", “URL2”, “URL3”)

Dim MyRequest As Object: Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
Dim MyUrls: MyUrls = urlArray
Dim k As Long
Dim Json As Object

For k = LBound(MyUrls) To UBound(MyUrls)
    With MyRequest
        .Open "GET", MyUrls(k)
        .Send
        Set Json = JsonConverter.ParseJson(.ResponseText)
       ''[where I’d like some type of While statement checking into the below line for content]
        Sheets("Sheet" & sheetCount).Cells(i, 1) = Json("prices")(i)("name")
        Sheets("Sheet" & sheetCount).Cells(i, 2) = Json("prices")(i)("cost")("base")
        i = i + 1
   End With
sheetCount = sheetCount + 1
Next
End Sub
Dim i As Long, p As Object

For i = 1 To Json("prices").Count
    Set p = Json("prices")(i)
    Debug.Print p("name"), p("cost")("base"), p("cost")("fareType")
Next i