[iOS BoostCourse] JSONEncoding & JSONDecoding
학습에 대한 내용은 Edwith에서 제공하는 iOS 부스트코스를 공부하면서 참고한 것입니다. [관련 강의]
JSONEncoder
과 JSONDecoder
에 대해서는 익히 많이 들어봤습니다. 서버로부터 데이터를 받아올 때 json을 필히 다루게 되는데 사실 지금까지 저는 다음과 같은 방식으로 데이터를 파싱해왔습니다.
[iOS BoostCourse] JSONEncoding & JSONDecoding
학습에 대한 내용은 Edwith에서 제공하는 iOS 부스트코스를 공부하면서 참고한 것입니다. [관련 강의]
JSONEncoder
과 JSONDecoder
에 대해서는 익히 많이 들어봤습니다. 서버로부터 데이터를 받아올 때 json을 필히 다루게 되는데 사실 지금까지 저는 다음과 같은 방식으로 데이터를 파싱해왔습니다.
다음은 졸업 작품으로 진행중인 비콘을 활용한 프로젝트 코드의 일부입니다. 서버로부터 매장들의 비콘 식별 값들을 받아올 때 Alamofire를 이용해서 json 데이터를 받아오는 상황입니다. 단순하다면 단순할 수 있는 코드이지만 만일 받아오는 값이 많아진다면 상당히 귀찮은 작업이 될 것입니다. 그럼에도 불구하고 저는 위의 방법을 고수해왔습니다.
하지만 부스트코스를 통해 JSONEncoder
와 JSONDecoder
을 제대로 익혀보았고 이를 저의 프로젝트에 적용시켜가며 소개해드리도록 하겠습니다.
저는 사실 이전에 이 둘과 거의 비슷한 PropertyListEncoder
와 PropertyListDecoder
에 대해 공부해보았는데요. 이에 대한 내용은 저의 다른 글을 참고해주시기 바랍니다. 사실상 거의 사용법이 비슷하기 때문에 먼저 해당 글을 읽고 오신다면 훨씬 도움이 될 것 같습니다.
먼저 이전 방법을 사용할 때 사용했던 모델 구조체를 살펴보도록 하겠습니다.
그리고 여기에 JSONEncoder
와 JSONDecoder
를 사용하기 위해 Codable
프로토콜을 명시해주겠습니다.
그리고 JSONEncoder
와 JSONDecoder
를 사용하면 json 데이터를 담게 될 모델 데이터 타입에 매핑을 하게 되는데 이때 json의 키 값과 이를 담는 모델 데이터 타입의 프로퍼티 이름이 반드시 일치해야 합니다. 그리고 json의 키에 해당하는 값이 존재하지 않을 수도 있기 때문에 저는 항상 옵셔널 타입으로 지정합니다.
그리고 json 키에 해당하는 프로퍼티만 명시할 수 있는 것은 아닙니다. 다른 용도의 프로퍼티도 명시할 수 있으며 매핑 과정이 일어날 때 자동으로 해당 프로퍼티는 제외되고 매핑됩니다.
또한 만일 원하는 프로퍼티 명을 사용해주기 위해서는 CodingKey
프로토콜을 사용한 String 타입을 원시 값을 사용하는 Enums
를 사용하면 됩니다. 이를 적용한 코드는 다음과 같습니다.
이렇게 변경된 Store
구조체에 서버에서 받아온 데이터들을 매핑시켜보도록 하겠습니다.
어떠신가요? 기존에 제가 사용했던 방법보다 훨씬 간결해진 것을 확인하실 수 있습니다. 그리고 저는 Store
객체의 배열로 저장할 것이기 때문에 [Store].self
를 통해 Store
객체 배열의 메타데이터로 명시해주었습니다.
마지막으로 저의 프로젝트에서는 json 데이터 타입으로 인코딩해야하는 상황은 없지만 이를 간단히 코드로 구현해보면 다음과 같습니다.
오늘은 이렇게 json 데이터를 쉽게 파싱하고 생성할 수 있는 JSONEncoder
와 JSONDecoder
에 대해 공부해보았습니다. 오늘은 굉장히 기초적인 내용을 다루어보았고 다음에는 보다 복잡한 json 데이터를 파싱하는 방법을 다루어보도록 하겠습니다. 감사합니다.
Source : github
참고자료
[iOS Boostcourse] 동시성과 병렬성 그리고 비동기 프로그래밍 (3) | 2018.07.18 |
---|---|
[iOS BoostCourse] scaleAspectFill ? scaleAspectFit? scaleToFill? (0) | 2018.04.11 |
[iOS BoostCourse] PJT1 - AVAudioPlayer (1) | 2018.04.06 |
[iOS BoostCourse] iOS의 View 체계 (0) | 2018.04.06 |
[iOS BoostCourse] 시작 (3) | 2018.04.06 |
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |