VBA로 JSON 구문 분석

Bilal Shahid 2023년6월21일
  1. JSON 파싱
  2. VBA로 JSON을 구문 분석하는 첫 번째 방법
  3. VBA로 JSON을 구문 분석하는 두 번째 방법
  4. VBA로 JSON을 구문 분석하는 세 번째 방법
  5. 결론
VBA로 JSON 구문 분석

JSON(JavaScript Object Notation)은 JavaScript의 개체 구문을 기반으로 구조화된 데이터를 나타내는 표준 텍스트 기반 형식입니다. 예를 들어 웹 페이지에 표시되어야 하는 서버에서 클라이언트로 데이터를 보내는 것과 같이 웹 기반 응용 프로그램에서 데이터를 저장하고 전송하는 데 사용됩니다.

JSON 구문은 다음과 같습니다.

{ "name": "Alina", "age": 19, "gender": "female", }

JSON의 데이터는 쉼표로 구분된 키와 값 쌍으로 저장됩니다. 각 키는 말 기호 ("")로 작성되며 키에 해당하는 값은 콜론 다음에 옵니다.

JSON 파싱

JSON 구문 분석을 논의하기 전에 구문 분석이 무엇인지 논의할 필요가 있습니다. 값을 데이터 유형에서 다른 유형으로 변환하는 것을 구문 분석이라고 합니다. 예를 들어 문자열 값을 int 데이터 유형으로 변환하려면 사용자가 문자열 값을 구문 분석해야 합니다.

JSON 구문 분석은 텍스트 기반 JSON을 나중에 프로그램에서 사용할 수 있는 JavaScript 개체로 변환하는 것입니다. 구문 분석 기능은 제공된 데이터가 유효한 JSON인지 여부도 확인합니다.

VBA를 사용하면 외부 라이브러리를 사용하지 않고 JSON을 구문 분석할 수 있습니다. 사용자가 JSON을 통해 쉽게 구문 분석할 수 있도록 하는 세 가지 솔루션이 아래에 설명되어 있습니다.

VBA로 JSON을 구문 분석하는 첫 번째 방법

VBA를 사용하여 JSON을 구문 분석하는 첫 번째 방법은 다음과 같습니다.

Function DecodingOfJSON (jsonString As Variant)
    Set obj = CreateObject("ScriptControl"): obj.Language = "JScript"
    Set jsonDecode = obj.Eval("(" + jsonString + ")")
End Function

Sub main()
    Set arr = DecodingOfJSON(jsonString )
End Sub

DecodingOfJSON() 함수는 jsonString을 매개변수로 사용합니다. 함수 내에서 객체 obj가 생성되고 jsonString이 평가됩니다.

jsonString의 평가 결과는 JSON에서 평가된 모든 JavaScript 개체를 저장하는 배열 arr로 반환됩니다. ScriptControl 또는 MSScriptControl.ScriptControl을 사용하여 개체를 만들 수 있습니다.

VBA로 JSON을 구문 분석하는 두 번째 방법

두 번째 방법은 XMLHTTP 개체를 만듭니다. 클라이언트 컴퓨터는 XMLHTTP 개체를 사용하여 임의의 HTTP 요청을 보내고 요청에서 응답을 받습니다.

Microsoft XML DOM(문서 개체 모델)은 응답을 구문 분석하고 사용자 요구 사항에 따라 표시합니다.

JSON을 구문 분석하는 코드는 다음과 같습니다.

Sub parseJSON()

    Dim Book As Object
    Dim sc As Object

    Set sc = CreateObject("MSScriptControl.ScriptControl")
    sc.Language = "JScript"

    With CreateObject("MSXML2.XMLHTTP")

        .Open "GET", "http://www.omdbapi.com/?t=frozen&y=&plot=short&r=json", False
        .send
        Set Movie = sc.Eval("(" + .responsetext + ")")
        .abort

        With Sheets(7)
            .Cells(1, 1).Value = Book.Title
            .Cells(1, 2).Value = Book.Year
            .Cells(1, 3).Value = Book.Rated
            .Cells(1, 4).Value = Book.Released
            .Cells(1, 5).Value = Book.Writer

        End With
    End With
End Sub

이 코드는 JSON을 구문 분석하기 위해 ScriptControl 객체를 생성합니다. .Open 매개변수에 언급된 URL에서 JSON을 가져옵니다.

스크립팅 언어는 JSON을 구문 분석하기 위해 JScript로 설정됩니다. sc.Eval은 JSON을 구문 분석하고 결과 JavaScript 개체를 Book 개체에 할당합니다.

With 문을 사용하면 Book 변수에 저장된 JavaScript 개체의 값을 시트 7의 다른 셀에 할당할 수 있습니다.

참고: 해결책은 JSON 파서가 아닌 JScript 파서입니다. JSON에 악성 코드를 설치할 수 있습니다. ScriptControl.UseSafeSubset = True 명령을 사용하여 JScript 파서가 JSON에 악성 코드를 추가하지 않도록 할 수 있습니다.

VBA로 JSON을 구문 분석하는 세 번째 방법

세 번째 방법은 Variant를 선언하고 각 항목을 구분하는 quote-comma-quote 형식에서 responsetext를 분할합니다. 필요한 견적을 찾아 값을 추출할 수 있습니다.

예를 들어 마지막 JavaScript 개체가 필요한 경우 InStrRev 기능을 사용하여 마지막 인용문을 찾습니다. InStrRev 기능은 찾고 있던 개체를 반환합니다.

Dim Items As Variant
Dim RequiredStr As Variant

Items = Split(.responsetext, """,""")
RequiredStr = Mid(Items(8), InStrRev(Items(8), """") + 1)

결론

VBA를 통해 사용자는 외부 라이브러리를 사용하지 않고 JSON을 구문 분석할 수 있습니다.

다른 JSON에서 반복적으로 동일한 코드 줄을 실행하기 위해 Microsoft 애플리케이션에서 매크로를 만들 수 있습니다. 자신에게 맞는 올바른 솔루션을 찾고 필요할 때마다 사용할 수 있도록 매크로에 저장하기만 하면 됩니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub