如何从vba中的列表中提取元素

时间:2018-10-22 16:39:17

标签: vba

我已经从数据库中提取了以下内容:

[{“ identifier”:{“ strategyType”:“ element1”},“ elnSchedules”:[{“ paymentDate”:[“ element2”,“ element2”]},{“ paymentDate”:[“ element2”, “ element2”]}],“ composition”:{“ components”:[{“ instrument”:{“ exerciseType”:[“ element3”,“ element3”]}}},{“ instrument”:{“ exerciseType”:[ “ element3”,“ element3”]}}]},“链接”:[]}]

我想构建一个vba并在excel中创建一个表,该表的标题为:strategyType,paymentDate,exerciseType

和元素:相应标题下的element1,element2,element3(而每个元素只能出现一次)。

到目前为止,我有:  对于i = 1到jsonO.Count             '设置标题             如果i = 1那么                 j = 1                 对于jsonO(i).Keys()中的每个StrKey                     activeWS.Cells(i + offset,j)= StrKey                     j = j + 1                 下一个             如果结束

        j = 1
        For Each StrKey In jsonO(i).Keys()
            If (StrKey <> "links") Then
                activeWS.Cells(i + offset + 1, j) = jsonO(i)(StrKey)
                j = j + 1
            End If
        Next

但这仅提取标识符,电子时间表和组成,而无法进入特定元素。

有什么办法吗?

谢谢。

-------------------新问题----------------------

我使用了答案中发布的内容,并试图在答案中发布的功能下构建新功能(而这两个功能均由主功能调用):

公共子GetEndDate()

Dim activeWS As Worksheet
Set activeWS = ThisWorkbook.Worksheets("Data")
Dim jsonStr As String, Json As Object, headers()
'headers = Array("strategyType", "paymentDate", "exerciseType")
jsonStr = [{"optionFeatures":{"Strike Setting":[{"endDate":["2018-10-16"]}]},"links":[]}] '<== read from cell
Set Json = JsonConverter.ParseJson(jsonStr)(1)
activeWS.Cells(1, 13) = Json("optionFeatures")("Strike Setting")("endDate")

结束子

但是它无法从字符串中读取,还是我需要再次重置lib?

谢谢。

1 个答案:

答案 0 :(得分:1)

使用JSONConverter.bas解析从单元格读取的JSON字符串,如下所示。假设您只需要每个值的一个实例。

注意:

添加JSONConverter.bas后,您需要转到VBE>工具>引用>添加对Microsoft脚本运行时的引用。

您的JSON结构如下:

[]表示一个集合,通过索引从1开始对项目进行访问。{}表示具有通过键访问的项目的字典。

我使用适当的语法遍历树以检索每个元素的首次出现。

Option Explicit
Public Sub GetInfoFromSheet()
    Dim jsonStr As String, Json As Object, headers()
    headers = Array("strategyType", "paymentDate", "exerciseType")
    jsonStr = [A1] '<== read from cell
    Set Json = JsonConverter.ParseJson(jsonStr)(1)

    With ThisWorkbook.Worksheets("Sheet1")
        .Cells(1, 1).Resize(1, UBound(headers) + 1) = headers
        .Cells(2, 1) = Json("identifier")("strategyType")
        .Cells(2, 2) = Json("elnSchedules")(1)("paymentDate")(1)
        .Cells(2, 3) = Json("composition")("components")(1)("instrument")("exerciseType")(1)
    End With
End Sub