728x90
반응형
안녕하세요🐶
빈지식 채우기의 비니🙋🏻♂️입니다.
오늘은 Json 다루기에 대해 알아보도록 할건데요!
대표적으로 2가지를 뽑을 수 있습니다.
JsonSerialization 과 Codable
자세히 알아보도록 하겠습니다!
1. JsonSerialization
Json 과 Equivalent Foundation Object 사이에 변환을 담당하는 객체입니다.
여기서 말하는 Equivalent Foundation Object 란,
Array 와 Dictionaray 입니다.
.
.
고로 Json > Array or Dictionary 또는 Array or Dictionary > Json 으로 변환해주는 객체라고 볼 수 있습니다.
우리는 정의되어있는 메서드 중 data, jsonObject 를 주로 사용하고 있습니다.
.
그럼 어떻게 쓰냐..? 바로 예시를 통해 알아보도록 하겠습니다.
1-1. JsonObject()
func stringToJson() {
// Dictionary String 정의
let str = "{\"names\": [\"Sean\", \"Endrew\"]}"
let data = Data(str.utf8)
do {
// Dictionary to Json 변환
if let json = try JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] {
if let names = json["names"] as? [String] {
print(names)
}
}
} catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
}
- Json Dictionary 가 유효하지 않으면 Json 변환이 실패하므로, Try/Catch를 사용하여 오류 처리가 필요합니다.
- Json 내부에는 어떠한 값이 있는지 모르니까 조건부로 값을 확인하여 매핑해야 합니다. ( ex. as? [String] )
1-2. data()
func jsonToArray() {
// Dictionary 선언
let dic: [String: Any] = [
"names": ["Sean", "Endrew"]
] as Dictionary
do {
// Dictionary to data 변환
let arrayJson = try JSONSerialization.data(withJSONObject: dic, options: .prettyPrinted)
print(String(data: arrayJson, encoding: .utf8) ?? "")
} catch {
print(error.localizedDescription)
}
}
- data 화 과정에서 오류가 날 수 있으므로, Try/Catch를 사용하여 오류 처리가 필요합니다.
- data 형태로 변환 후 String 객체 메서드를 통해 String 변환을 합니다.
2. Codable
- Decodable 과 Encodable 프로토콜을 사용할 수 있는 타입입니다.
- Codable을 통해 변환하고 싶은 구조체를 만들고, JsonDecoder을 통해 디코딩할 수 있습니다.
// Codable 정의
struct name: Codable {
let name: String?
}
func codableTest() {
do {
// API 및 그외 통신으로 부터 받은 값에 대해 Decode 진행
let name = try JSONDecoder().decode(name.self, from: data)
} catch {
print(error.localizedDescription)
}
}
- Codable 프로토콜을 상속받는 name 구조체를 설정합니다.
- 이후 통신으로부터 받은 Response 값을 JsonDecoder을 통해 name 구조체와 매핑시킵니다.
여기서 주의❗️
위에 name의 경우 String 으로 선언하였으나,
넘어오는 값이 String 타입이 아닐 경우, 오류가 발생하여 catch 문구로 빠지게 됩니다.
반드시 변수 타입이 같게 설정해야 합니다.
3. 결론
JsonSerialization | Codable | |
특징 | 1. jsonObject(), data() 메서드를 통해 값의 변환이 가능하다. 2. 변환된 값 안에 어떠한 값 또는 타입인지 알 수 없다. |
1. Codable 프로토콜을 상속받는 구조체를 설정한다. 2. jsonDecoder() 을 통해 생성한 구조체에 Response 값을 매핑시킬 수 있다. |
주의해야할 점 | 값의 유무와 타입을 알 수 없기 때문에, 일일히 값을 매칭시켜 변환하여 사용해야 한다. | 생성한 Codable 구조체 내 변수 타입와 매핑되는 값의 타입이 반드시 같아야 한다. |
그냥 ... Codable ... 쓰세요..
감사합니다!
참고
728x90
반응형
'iOS 🖥️ > Swift' 카테고리의 다른 글
[Swift] TextView HyperLink (0) | 2024.05.21 |
---|---|
[Swift] init 과 convenience init 의 차이 (2) | 2024.02.28 |
[ Swift ] URLComponents 알아보기 (0) | 2023.06.15 |
[ Swift ] Expandable UITableView 만들기 (2) | 2023.05.23 |
[ RxSwift ] Observable & Subscribe (0) | 2023.05.09 |