Json到Excel(多层)

时间:2018-10-30 12:45:06

标签: json excel vba

我知道如何使用VBA将JSON解析为Excel,但是多层JSON却有问题。

示例:

{
"Level1": [{
    "String1": "Data1",
    "Level 2": [{
        "String2": "Data2",
        "String3": "Data3",
        "Level3": [{
            "String4": "Data4",
            "String5": "Data5"
        }]
    }]
 }]
}

如何获得一切?

1 个答案:

答案 0 :(得分:1)

{意味着一个字典,因此您可以通过键访问,[意味着一个集合,因此您可以通过索引访问。 ""表示字符串文字,因此您按原样阅读。测试数据类型和所需的句柄。下面,我使用JSON parser从单元格A1读取JSON字符串。将.bas从该链接添加到您的项目后,您可以通过VBE>工具>引用> Microsoft脚本运行时添加引用。

我使用子EmptyDict,递归地调用它来测试当前对象是字典还是集合,然后循环直到我清空每个字典。对于每个集合,我向右移一列。

如评论中所述,您将根据工作表中所需的输出格式进行调整。


您要下降的树结构如下:

enter image description here


VBA:

Option Explicit
Public r As Long, c As Long
Sub readValues()

    Dim json As Object, item As Object
    Set json = JsonConverter.ParseJson([A1])("Level1")(1) 'dictionary

    r = 1: c = 1

    EmptyDict json

End Sub

Public Sub EmptyDict(ByVal dict As Object)

    Dim key As Variant, item As Object

    Select Case TypeName(dict)
    Case "Collection"

    For Each item In dict
        c = c + 1
        r = 1
        EmptyDict item
    Next

    Case "Dictionary"
        For Each key In dict
            If TypeName(dict(key)) = "Collection" Then
                EmptyDict (dict(key))
            Else
                With ThisWorkbook.Worksheets("Sheet2")
                    .Cells(r, c) = dict(key)
                End With
                r = r + 1
            End If
        Next

    End Select
End Sub