JSON VBA Parse to Excel
Take a look at the below example. Import JSON.bas module into the VBA project for JSON processing.
Option ExplicitSub Test() Dim sJSONString As String Dim vJSON Dim sState As String Dim aData() Dim aHeader() Dim vResult ' Retrieve question #50068973 HTML content With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://stackoverflow.com/questions/50068973", False .send sJSONString = .responseText End With ' Extract JSON sample from the question sJSONString = "{" & Split(sJSONString, "<code>{", 2)(1) sJSONString = Split(sJSONString, "</code>", 2)(0) ' Parse JSON sample JSON.Parse sJSONString, vJSON, sState If sState = "Error" Then MsgBox "Invalid JSON" End End If ' Convert raw JSON to array and output to worksheet #1 JSON.ToArray vJSON, aData, aHeader With Sheets(1) .Cells.Delete .Cells.WrapText = False OutputArray .Cells(1, 1), aHeader Output2DArray .Cells(2, 1), aData .Columns.AutoFit End With ' Flatten JSON JSON.Flatten vJSON, vResult ' Convert flattened JSON to array and output to worksheet #2 JSON.ToArray vResult, aData, aHeader With Sheets(2) .Cells.Delete .Cells.WrapText = False OutputArray .Cells(1, 1), aHeader Output2DArray .Cells(2, 1), aData .Columns.AutoFit End With MsgBox "Completed"End SubSub OutputArray(oDstRng As Range, aCells As Variant) With oDstRng .Parent.Select With .Resize(1, UBound(aCells) - LBound(aCells) + 1) .NumberFormat = "@" .Value = aCells End With End WithEnd SubSub Output2DArray(oDstRng As Range, aCells As Variant) With oDstRng .Parent.Select With .Resize( _ UBound(aCells, 1) - LBound(aCells, 1) + 1, _ UBound(aCells, 2) - LBound(aCells, 2) + 1) .NumberFormat = "@" .Value = aCells End With End WithEnd Sub
The output on the worksheet #1 for the raw sample you provided is as follows:
And there is the flattened sample output on the worksheet #2:
BTW, the similar approach applied in other answers.