코딩
Swift 공공데이터 parsing 본문
https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15081240
공공데이터활용지원센터_코로나19 예방접종 위탁의료기관 조회서비스
전국 코로나19 예방접종 위탁의료기관 정보입니다. 위탁의료기관의 주소, 연락처, 운영시간 등을 제공하고 있습니다. 해당 데이터는 질병관리청이 관리하는 위탁의료기관과의 계약정보를
www.data.go.kr
코로나19 예방접종 위탁의료기관 조회서비스데이터 swift로 불러오기
1. JSON데이터 불러오기
override func viewDidLoad() {
if let url = URL(string:"사이트제공주소") {
let request = URLRequest.init(url: url)
URLSession.shared.dataTask(with: request) {
(data, response, error) in guard let data = data else {return}
let decoder = JSONDecoder()
print(response as Any)
do{ let json = try decoder.decode(hospitalData.self , from: data)
print(json)
}
catch{
print(error)
}
}.resume()
}
super.viewDidLoad()
// Do any additional setup after loading the view.
}
}
URLSession.shared.dataTask(with: request) 을 해주면 사이트로 부터 data, request 그리고 error 유형을 불러올 수 있다.
우리가 Codable을 이용하여 출력하고자 하는 데이터는 data지만, 요청이 잘 되었는지 어떤 에러가 발생했는지 확인을 하기 위해서는
위와 같이 response와 error 또한 확인해주면서 Build를 해주는것이 좋다.
response는 1.URL 2.Status Code 3.Header 에 대한 정보를 담고있다.
URL
위의 코드에서 Url로 써준 부분이며, serviceKey= 뒷부분은 내가 할당받은 개인고유키를 써주면 된다.
Status Code
200 | 성공적으로 수행됨 |
400, 401 | 인증정보가 정확하지 않음 |
500 | API 서버에 문제가 발생하였음 |
위의 코드는 StatusCode: 200이므로 성공적으로 데이터를 불러 왔음을 알 수 있다.
꼭 StatusCode가 200인지 확인하고 다음단계로 넘어가야한다****
Header
파일에 대한 정보를 알 수 있다.
2. JSON파일 Decode
do{ let json = try decoder.decode(hospitalData.self , from: data)
print(json)
}
catch{
print(error)
}
hospitalData: url로 불러온 JSON파일의 규격에 맞춘 struct
JSON파일을 읽어주기 위해서, Xcode의 프로젝트 안에 이와 똑같은 구조를 가진 struct를 만들어 주어야한다.
//hospitalData.swift
import Foundation
struct hospitalData: Decodable{
let currentCount: Int
let data: [Data]
}
struct Data: Decodable{
var orgcd: String
var orgnm: String
var orgTlno: String
var orgZipaddr: String
var slrYmd: String
var dywk: String
var hldyYn: String
var lunchSttTm: String
var lunchEndTm: String
var sttTm: String
var endTm: String
}
일단, '기본적으로' 동일한 struct를 만들어 주었다. 하지만 이를 작동시키면
"Expected String value but found null instead."
error가 출력된다. 이는 JSON에 lunchSttTm: null인 정보가 있지만, null값에 대한 아무런 조치를 취하지 않았다는것
이는 간단하게 String뒤에 ?를 추가하여 해결해줄 수 있다.
struct Data: Decodable{
var orgcd: String
var orgnm: String
var orgTlno: String
var orgZipaddr: String
var slrYmd: String
var dywk: String
var hldyYn: String
var lunchSttTm: String?
var lunchEndTm: String?
var sttTm: String?
var endTm: String?
}
3. 출력화면
data는 배열로 접근할 수 있다.
do{ let json = try decoder.decode(hospitalData.self , from: data)
for d in json.data{
print(d)
}
}
'Swift' 카테고리의 다른 글
Swift combination구현 (0) | 2021.07.01 |
---|---|
Swift 딕셔너리에서 값 가져오기 (0) | 2021.06.30 |
Swift String 자르기 (0) | 2021.06.30 |
Xcode playground 사용하기 (+문제점) (0) | 2021.06.29 |