извлечь элемент из массива - PullRequest
       8

извлечь элемент из массива

0 голосов
/ 05 сентября 2018

Здравствуйте, я уже задавал похожий вопрос: у меня большой JSON-файл, но нужная мне информация - лишь малая его часть. Однако эта часть является двумерным массивом из части «text». «Size». В любом случае я могу зациклить каждый массив и получить число из того, что у меня уже есть?

{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": [[0,1,2,3,4],[5,6,7,8,9],[10,11,12,13,14]], "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" } } }

Меня от кого-то научили (спасибо!) Использовать следующий код

Option Explicit
Public Sub GetInfo()
    Dim strJSON As String, json As Object, rowNumber As Long
    Application.ScreenUpdating = False
    Const PATH As String = "C:\Users\User\Desktop\test.JSON"
    strJSON = GetJSONFromFile(PATH)
    Set json = JsonConverter.ParseJson(strJSON)
    Set json = json("widget")("text")
    Dim key As Variant
    With ThisWorkbook.Worksheets("Sheet1")
        For Each key In json
            rowNumber = rowNumber + 1
            .Cells(rowNumber, 1) = key
            .Cells(rowNumber, 2) = json(key)
        Next key
    End With
    Application.ScreenUpdating = True
End Sub

Большое спасибо

1 Ответ

0 голосов
/ 06 сентября 2018

Просмотр ожидаемого результата поможет. Если вы просто ищите элементы в коллекции коллекций, возвращаемые JsonConverter.ParseJson(strJSON)("widget")("text")("size"), то следующее очистит их.

Option Explicit
Public Sub GetInfo()
    Dim strJSON As String, json As Object, rowNumber As Long, i As Long, j As Long
    Const PATH As String = "C:\Users\User\Desktop\test.JSON"
    strJSON = GetJSONFromFile(PATH)
    Set json = JsonConverter.ParseJson(strJSON)("widget")("text")("size") '<collection of collections

    With ThisWorkbook.Worksheets("Sheet1")
        For i = 1 To json.Count
            For j = 1 To json(i).Count
                rowNumber = rowNumber + 1
                .Cells(rowNumber, 1) = json(i)(j)
            Next
        Next
    End With
End Sub
Public Function GetJSONFromFile(ByVal PATH As String) As String
    Dim fso As Object, f As Object, outputString As String

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.OpenTextFile(PATH)

    Do Until f.AtEndOfStream
        outputString = f.ReadAll()
    Loop
    f.Close

    GetJSONFromFile = outputString
End Function

Структура JSON:

Путь к коллекции коллекций можно увидеть в структуре JSON ниже. {} - это словари, а [] - это коллекции.

image

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...