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 애플리케이션에서 매크로를 만들 수 있습니다. 자신에게 맞는 올바른 솔루션을 찾고 필요할 때마다 사용할 수 있도록 매크로에 저장하기만 하면 됩니다.
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