Classic ASP

[ASP] body 로 전송된 json 데이터를 받고, 파싱하기 (json 파싱)

최고관리자
2022.04.21 10:32 5,670 0

본문

Classic ASP 에서는 body로 넘어온 데이터를 받기위해서 IIS 설정이 필요하다.

적용하고자 하는 사이트의 처리기 매핑에서  ASPClassic 선택후 우측 작업영역의 편집 메뉴를 통해 아래 그림과 같이 적용해야 한다.  (기본값으로 GET, POST만 있을 것이다.)


64b58af32c7ad2c8e8769e39409fd4a6_1650503436_4331.png
 


서버 설정이 끝났다. 소스를 코딩해 보자.



1. body로 넘어온 데이터를 받기위해서 펑션 만들기


Function BytesToStr(bytes)

Dim Stream

Set Stream = Server.CreateObject("Adodb.Stream")

Stream.Type = 1 'adTypeBinary

Stream.Open

Stream.Write bytes

Stream.Position = 0

Stream.Type = 2 'adTypeText

Stream.Charset = "utf-8"

BytesToStr = Stream.ReadText

Stream.Close

Set Stream = Nothing

End Function


Function RequestJSON(RequestTotalBytes)

If RequestTotalBytes > 0 Then

Dim lngBytesCount, jsonText

lngBytesCount = RequestTotalBytes

RequestJSON = BytesToStr(Request.BinaryRead(lngBytesCount))

Response.ContentType = "text/plain"

Else

RequestJSON = ""

End If

End Function


2. JSON 파싱 준비 (위에서 만든 펑션을 이용하여 받은 JSON 데이터를 파싱 위해서 ASP용 JSON 파싱 클래스 준비)

※ 소스코드 상단에 아래 인클루드 구문 추가 (소스파일은 첨부하였다.)

<!-- #include virtual="/lib/aspJSON1.17.asp" --> 



3. 소스 코드 샘플


jsonData = RequestJSON(Request.TotalBytes) '// 위에서 정의한 펑션을 이용하여 body로 넘어온 데이터 받기

jsonData = Replace(jsonData,"'","''") '// 데이터 값에 홀따옴가 있으면 파싱 에러가 난다. 방지를 위해 리플레이스 처리

Set oJSON = New aspJSON '// 위에 인클루드한 aspJSON1.17.asp 파일의 클래스 사용준비

oJSON.loadJSON(jsonData) '// JSON 데이터 파싱을 위한 준비 끝


위에서 받은 JSON 데이터 예시 (스포츠 경기 결과 데이터를 예시로 함)


{

    "StartDate": "2022-04-21 10:45:22.773",

    "GameMode": "상대모드",

    "LimitTime": 40,

    "Players": [

        {

            "Name": "홍길동",

"Result": "승",

            "Score": "30",

            "inning": 5,

            "inningScore": [

                1,

9,

10,

0,

10

            ]

        },

        {

            "Name": "아무게",

"Result": "패",

            "Score": "10",

            "inning": 4,

"inningScore": [

                1,

4,

5,

0

            ]

        }

    ]

}



'// 경기모드 및 제한시간 파싱

oJSON.data("GameMode")

변수명 = oJSON.data("LimitTime") '// 변수에 담아서 사용 가능


선수명 파싱

oJSON.data("Players")(0).item("Name")  '// 해당 값은 홍길동

oJSON.data("Players")(1).item("Name")  '// 해당 값은 아무게


선수명 수가 고정이라면 위처럼 배열 번호를 지정하면 되지만

유동적이라면 아래와같이 데이터가 있는 수만큼 반복문으로 파싱이 가능하다.

for i = 0 to oJSON.data("Players").Count-1

oJSON.data("Players")(i).item("Name")


'// 배열값인 선수별 데이터 아래 2단 배열 값 파싱

'// 오류 방지를 위해 해당 키명이 존재하는지 체크

if oJSON.data("Players")(i).Exists("inningScore") then

'// 각 선수별 inningScore 키네임의 데이터 수 만큼 파싱하기

for k = 0 to oJSON.data("Players")(i).item("inningScore").Count-1

oJSON.data("Players")(i).item("inningScore")(k)

next

end if

next


'// aspJSON1.17.asp 파일의 JSON 파싱용 클래스 닫기 

Set oJSON = Nothing







댓글목록 0

등록된 댓글이 없습니다.