[ios - Swift] URLSession으로 Json 데이터 가져오기
1. 준비 단계
Json을 받아올 Rest API URL이 필요하기 때문에 환율정보를 받을 수 있는 API 주소를 가져왔다.
아래 사이트에서 환율 정보를 가져올 수 있는 주소를 복사 후 변수에 넣는다.
간단한 API 제공 사이트 happycgi
FLASH 기타 플래쉬, 프로그램연동, 템플릿, 텍스트효과, 키보드,마우스, 컴포넌트, 이미지효과, 메뉴관련, 멀티미디어, 날짜,시계, 플래쉬게임 UTILITY HTML 제작, 편집기, 텔넷,SSH, 이미지편집기, 설치
happycgi.com
학습에 사용된 Json 데이터는 아래와 같은 Key, Value 형식의 리스트를 가진다.
2. Json 파싱
우선 사용할 함수를 살펴보면 아래와 같은 내용을 확인할 수 있다.
func dataTask(with request: URLRequest,
completionHandler: @escaping (Data?, URLResponse?, Error?) -> Void) -> URLSessionDataTask
request : URL, 캐시 정책, 요청 유형, 본문 데이터 또는 본문 스트림 등을 제공하는 URL 요청 개체
completionHandler : 로드 요청이 완료되면 호출될 핸들러이며 data, response, error 값을 확인할 수 있다.
이 핸들러는 델리게이트 큐에서 실행된다.
이제 함수를 만들어 사용해 보도록 하자.
func GetURLSessionData() {
let newsAddress : String = "https://api.manana.kr/exchange.json"
let task = URLSession.shared.dataTask(with: URL(string: newsAddress)!) { (data, response, error) in
if let pData = data {
do {
let json = try JSONSerialization.jsonObject(with: pData, options:[]) as! Array<Dictionary<String, Any>>
for (idx, value) in json.enumerated() {
if let symbol = value["symbol"] {
print("\(idx) - \(symbol)")
}
}
} catch {
}
}
}
task.resume()
}
task 변수를 선언 후 dataTask 함수의 클로저를 사용해 통신이 완료되면 데이터를 처리할 수 있도록 하였다.
이때 task 상수는 URLSessionTask 상속받은 URLSessionDataTask이며 다운로드 한 데이터를 메모리의 앱으로 직접 반환하는 URL 세션 작업이다.
resume() 함수를 통해 dataTask를 작업을 실행시키며 아래와 같은 결과를 콘솔에서 확인할 수 있다.
dataTask는 비동기 작업이기 때문에 주의해야 한다.
task.resume()
print("완료")
resume() 사용 후 print를 사용했지만 print 구문이 먼저 나오는 것을 확인 할 수 있다.