使用JSON-VBA解析HTML表时无法迭代

时间:2018-02-09 09:58:07

标签: json excel vba excel-vba

这是我想要解析的用户表的JSON视图中的示例",其中包含aliasList作为HTML表格中每列的标题,其余用户位于其下方。

{"totalCount":431,"messages":[],"results":[{"aliasList":["User Id","Name","last name"],"results":[[71512,"joe","adams"],[23445,"jack","wilson"],[34566,jill,goodman]],"executionDate":151134568428}],"Class":"com.zoho.controlpanel.reports.ReportsItemVO"}

这是我的解析调用者得到编译错误:

  

For Each只能遍历集合对象或数组

Public Sub exceljson()
Dim http As Object, JSON As Object, i As Integer
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "http://controlpanel.zoho.verio/rest/reports/search/NONE&offset=0", False
http.send
Set JSON = ParseJson(http.responseText)
i = 2
Dim data As String
data = JSON("results")(2)
Dim parsedData As Dictionary
Set parsedData = ParseJson(data)
For Each item In data
Sheets(5).Cells(i, 1).Value = item("results")(2) 'key is called simply "2"
Sheets(5).Cells(i, 2).Value = item("results")(4)
Sheets(5).Cells(i, 3).Value = item("results")(6)
Sheets(5).Cells(i, 4).Value = item("results")(13)
Sheets(5).Cells(i, 5).Value = item("results")(16)
Sheets(5).Cells(i, 6).Value = item("results")(18)
i = i + 1
Next
MsgBox ("complete")
End Sub

我在数据声明中尝试了很多组合,哪些嵌套数组要解析而没有成功。但是,我不知道在这种情况下我是否需要使用aliasList,我不知道该怎么做。

我应该在通话中修改什么?

2 个答案:

答案 0 :(得分:1)

这部分代码说data是一个字符串:

Dim data As String
data = JSON("results")(2)

因此,它不可迭代。尝试将data设为其他内容并进行迭代。这是迭代string

的方法示例
Option Explicit

Public Sub TestMe()

    Dim data            As String
    Dim somethingElse   As Variant

    data = "How much should I party today?"
    somethingElse = Split(data)

    Dim cnt             As Long
    For cnt = LBound(somethingElse) To UBound(somethingElse)
        Debug.Print somethingElse(cnt)
    Next cnt

End Sub

答案 1 :(得分:1)

您的JSON格式不正确,因为您只能拥有每个唯一键的一个实例。 当第二个"结果"解析它只会覆盖第一个。

这对我有用(在修复JSON中的错误之后):

Dim j, k, o

'loading json from worksheet cell...
Set j = JsonConverter.ParseJson(Sheet1.Range("B6").Value)

For Each o In j("results")
    Debug.Print o("1"), o("2"), o("3")
Next

编辑:为您的"实际"更新JSON:

Sub Tester55()

    Dim j, c, res, v

    'loading json from worksheet cell...
    Set j = JsonConverter.ParseJson(Sheet1.Range("B6").Value)
    Set res = j("results")

    Set c = ActiveSheet.Range("F2")

    WriteCollection c, res(1)("aliasList")

    For Each v In res(1)("results")
        Set c = c.Offset(1, 0)
        WriteCollection c, v
    Next v

End Sub

Sub WriteCollection(rng, col)
    Dim v, i As Long
    For Each v In col
        rng.Offset(0, i).Value = v
        i = i + 1
    Next v
End Sub