[swift] JSON 데이터의 경로를 지정하여 매핑하는 방법은?

Swift에서 JSON 데이터를 처리할 때, 데이터의 특정 경로에 있는 값을 매핑하는 것은 매우 유용한 기능입니다. 이를 위해서는 Codable 프로토콜을 사용하고, JSONDecoder를 활용하여 JSON 데이터를 디코딩해야 합니다.

다음은 JSON 데이터를 경로를 지정하여 매핑하는 예시입니다:

import Foundation

// JSON 데이터 모델 구조
struct Person: Codable {
    var name: String
    var age: Int
    var address: Address
}

struct Address: Codable {
    var city: String
    var postalCode: String
}

// JSON 데이터
let jsonStr = """
{
    "name": "John",
    "age": 30,
    "address": {
        "city": "Seoul",
        "postalCode": "12345"
    }
}
"""

// JSON 데이터 디코딩
let jsonData = jsonStr.data(using: .utf8)!
do {
    let decoder = JSONDecoder()

    // JSON 데이터의 경로 지정을 위한 KeyPath 사용
    let nameKeyPath = \Person.name
    let cityKeyPath = \Person.address.city

    // JSON 데이터를 매핑
    let person = try decoder.decode(Person.self, from: jsonData)
    let name = person[keyPath: nameKeyPath]
    let city = person[keyPath: cityKeyPath]

    print("이름: \(name)") // 출력: 이름: John
    print("도시: \(city)") // 출력: 도시: Seoul
} catch {
    print("JSON 디코딩 실패: \(error.localizedDescription)")
}

위의 예시에서는 Person과 Address라는 구조체로 JSON 데이터를 모델링하였습니다. JSONDecoder를 사용하여 데이터를 디코딩할 때, 경로를 지정하기 위해 KeyPath를 사용합니다. 이를 통해 person[keyPath: nameKeyPath]와 같이 경로를 지정하여 JSON 데이터의 특정 값을 매핑할 수 있습니다.

이와 같은 방법을 활용하면, Swift에서 JSON 데이터의 경로를 지정하여 원하는 값을 매핑할 수 있습니다. 따라서 JSON 데이터를 구조화된 형태로 쉽게 처리할 수 있습니다.

참고 문서: