Arrays 将JSON直接解析到数组中

Arrays 将JSON直接解析到数组中,arrays,json,excel,vba,Arrays,Json,Excel,Vba,场景:我正在使用一些函数从带有VBA的网站检索数据。这些函数当前将数据读入一个JSON文件,并通过进一步的处理将其粘贴到工作表中 问题:每次检索新JSON时必须清除并写入工作表,这会妨碍代码的性能 问题:是否可以将JSON对象内的数据直接解析到变量数组中,以便在内存中完成任何操作 我已经尝试过的:通过我在网上找到的一些研究和其他一些页面进行跟进。在所有这些情况下,数据首先解析到一个表中,或者直接解析到一个工作表中,而不是解析到一个数组中。我尝试通过解析表来修改将JSON写入工作表的函数,但这仍然

场景:我正在使用一些函数从带有VBA的网站检索数据。这些函数当前将数据读入一个JSON文件,并通过进一步的处理将其粘贴到工作表中

问题:每次检索新JSON时必须清除并写入工作表,这会妨碍代码的性能

问题:是否可以将JSON对象内的数据直接解析到变量数组中,以便在内存中完成任何操作

我已经尝试过的:通过我在网上找到的一些研究和其他一些页面进行跟进。在所有这些情况下,数据首先解析到一个表中,或者直接解析到一个工作表中,而不是解析到一个数组中。我尝试通过解析表来修改将JSON写入工作表的函数,但这仍然需要在将其读入数组之前执行“粘贴到工作表”步骤

我正在使用的函数:当我调用此函数时,我的JSON文件已经被检索并存储在内存中。此外,其工作方式是通过迭代解析每个偏移量,这将相当于数组的行。我的想法是跳过这个步骤,直接解析jSON

Public Sub WriteJsonToSheet(s As Worksheet, j As JSON, Optional ByVal fields As Variant, Optional rowOffset As Long = 0)
    If (rowOffset = 0) Then
    Dim loopvar1 As Long, loopvar2 As Long
        With s.UsedRange
            .ClearFormats
            .ClearContents
            .ClearComments
            .ClearHyperlinks
            .ClearOutline
            .ClearNotes
        End With                                 's.UsedRange.Clear
    End If
    If j.count = 0 Then Exit Sub

    ' get the list of all the fields in the -first- record
    If IsMissing(fields) Then
        fields = j.item("0.$").GetKeys("$.")
    End If

    ' create a table and write to the spreadsheet
    If (rowOffset = 0) Then
        WriteRowToRange s.Cells(1, 1), fields
        s.rows(1).AutoFilter
        s.rows(1).Font.Bold = True
    End If

    ' this is part of the original function, to paste to a worksheet
    If (j.count > 0) Then
        'Dim table As Variant
        table = JsonArrayToTable(j, fields)
        WriteTableToRange s.Cells(2 + rowOffset, 1), table
    End If
End Sub
我创建它是为了添加到我的代码中,但代码只是跳过了这一部分,没有执行任何操作:

    ' This is my attempt to past it directly to an array
        Dim table As Variant
        table = JsonArrayToTable(j)
        For loopvar1 = 0 To UBound(table, 2)
            'For loopvar2 = 1 To UBound(table, 2)
                TEST.Cells(1, loopvar1 + 1) = table(0, loopvar1)
            'Next loopvar2
        Next loopvar1
OBS.JSON中的数据可能差异很大,因此我们的想法是创建一个可以将JSON传递到数组中的通用函数。在本例中,数据示例如下(在我的代码中,此JSON针对多个ID进行检索。每次检索一个ID时,都会将其粘贴到输出工作表的新行):


了解JSON对象的结构会很有帮助,因为数据不同,这就是为什么我的想法只是创建一个能够将JSON添加到数组中的函数。但通常的结构就像我添加到OP中的一个示例。这个呢?您可能可以在Power Query中使用它,具体取决于您需要执行的操作。对于任意嵌套的JSON结构,似乎很难使用通用函数。将JSON对象“展平”为2D数组并不容易。对于任何已知的结构,如果您已经确定了如何将其表示为数组,则可以对其进行定义。
{
"Response": {
        "dm": [
                {
                  "$": {  
                       "id": ""830778192",
                       "end_period": ""2023-10-25T00:00:00",
                       "end_period1": "2021-01-25T00:00:00",
                       }
                }
              ]
            }
}