Excel - VBA

[VBA] JSON 을 배열로 변환하기 (JSONtoArray)

EGTools 2024. 3. 28. 22:22
728x90

이전 버전에서 몇 가지 문제가 있어서 함수 구성을 조금 변경하여 JSONPair 함수로 기본 분석을 정리하고나서

이름경로를 셀 하나씩 분리하여 배열을 확장하는 함수로 구성하니다.

 

결과는 이전 함수와 같으나 효율이 좀 더 좋아 졌습니다.

 

 함수 구문 

= JSONtoArray(  JSON ,   [PAD ]  )

 

 함수 인수 

인수명 옵션 기본값 설    명
JSON 필수 없음 JSON 텍스트, 배열 또는 범위
PAD 선택 빈문자열("") 빈 셀에 채울 값                              

 

 

JSON 구조에 대해서는 JSONPair 함수에서 정리한 결과 배열을 받아서 진행합니다.

따라서 이 함수에서는 매우 간단한 구조로 처리가 진행됩니다.

Function JSONtoArray(JSON, Optional PAD$ = vbNullString)
'======================================================================================================
' Name        JSONtoArray
' Version     v3r0      2024-03-28      EGTools(egexcelvba@gmail.com)
' Param       JSON      JSON text, Array or Range
'             PAD       배열을 만든 후 빈 셀에 채울 값, 기본값은 빈문자열("")
' Descripton  JSON text를 2D 배열로 변환
'             "이름 경로"를 각 단계별로 구분하여 기재하고 그 오른쪽에 "값"을 기재
'             "이름 경로"에는 쌍따옴표가 없이 이름만 표시됨
'             "값"은 숫자/True/False 외의 문자열은 쌍따옴표로 표시됨
'             목록("["과 "]"사용)에는 각 목록을 구분하기 위해 빈 행이 삽입됨
'======================================================================================================
    Dim iR&, iC&, iCol&, vD, vItem
    
    vD = JSONpair(JSON, Chr(7))  '// (Bell)을 구분자로 사용함에 주의
    
    If IsError(vD) Then JSONtoArray = vD: Exit Function
    If Not IsArray(vD) Then JSONtoArray = CVErr(xlErrValue): Exit Function
    For iR = 1 To UBound(vD, 1)
        iCol = Application.Max(iCol, Len(vD(iR, 1)) - Len(Replace(vD(iR, 1), Chr(7), "")))
    Next iR
    ReDim vResult(1 To UBound(vD, 1), 1 To iCol + 2)
    For iR = 1 To UBound(vD, 1)
        vItem = Split(vD(iR, 1), Chr(7))
        For iC = LBound(vItem) To UBound(vItem)
            vResult(iR, iC - LBound(vItem) + 1) = vItem(iC)
        Next iC
        vResult(iR, iC + 1) = IIf(IsEmpty(vD(iR, 2)), PAD, vD(iR, 2))
        For iC = iC + 2 To UBound(vResult, 2)
            vResult(iR, iC) = PAD
        Next iC
    Next iR
    JSONtoArray = vResult
End Function

 

다음은 JSON 이름을 검색하여 해당 결과를 표형태로 출력하는 JSONParse 함수를 작성합니다.

 

728x90