[ASP] body 로 전송된 json 데이터를 받고, 파싱하기 (json 파싱)
-
- 첨부파일 : aspJSON1.17.asp (9.2K) - 다운로드
본문
Classic ASP 에서는 body로 넘어온 데이터를 받기위해서 IIS 설정이 필요하다.
적용하고자 하는 사이트의 처리기 매핑에서 ASPClassic 선택후 우측 작업영역의 편집 메뉴를 통해 아래 그림과 같이 적용해야 한다. (기본값으로 GET, POST만 있을 것이다.)
서버 설정이 끝났다. 소스를 코딩해 보자.
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