[swift] Swift JSON 다루기

많은 애플리케이션에서는 웹 서비스와의 통신을 위해 JSON 형식을 사용합니다. Swift에서 JSON 데이터를 다루는 방법을 알아보겠습니다.

1. JSON 데이터 읽기

Swift에서 JSON 데이터를 읽기 위해서는 JSONSerialization 클래스를 사용합니다. 다음은 JSON 데이터를 읽고 파싱하는 예제입니다.

let jsonString = "{\"name\": \"John\", \"age\": 30}"
guard let jsonData = jsonString.data(using: .utf8) else {
    print("Failed to convert JSON string to data")
    return
}

do {
    if let json = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {
        if let name = json["name"] as? String, let age = json["age"] as? Int {
            print("Name: \(name), Age: \(age)")
        }
    }
} catch {
    print("Failed to parse JSON data: \(error)")
}

위의 예제에서는 주어진 JSON 문자열을 Data로 변환하고, JSONSerialization을 사용하여 jsonObject(with:options:) 메서드를 호출하여 JSON 객체를 파싱합니다. 이후에는 파싱된 JSON 객체에서 원하는 필드를 추출하여 사용할 수 있습니다.

2. JSON 데이터 쓰기

Swift에서 JSON 데이터를 생성하고 쓰기 위해서는 JSONSerialization 클래스의 data(withJSONObject:options:) 메서드를 사용합니다. 다음은 JSON 데이터를 생성하여 문자열로 변환하는 예제입니다.

var jsonDictionary = [String: Any]()
jsonDictionary["name"] = "John"
jsonDictionary["age"] = 30

do {
    let jsonData = try JSONSerialization.data(withJSONObject: jsonDictionary, options: [])
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print("JSON String: \(jsonString)")
    }
} catch {
    print("Failed to create JSON data: \(error)")
}

위의 예제에서는 jsonDictionary라는 딕셔너리를 사용하여 JSON 데이터를 만듭니다. 이후에는 data(withJSONObject:options:) 메서드를 호출하여 JSON 데이터를 생성하고, String(data:encoding:) 메서드를 사용하여 문자열로 변환합니다.

3. Swift Codable 프로토콜로 JSON 다루기

Swift 4부터는 Codable 프로토콜을 사용하여 JSON 데이터를 손쉽게 다룰 수 있습니다. 다음은 Codable 프로토콜을 이용하여 JSON 데이터를 읽고 쓰는 예제입니다.

struct Person: Codable {
    let name: String
    let age: Int
}

let jsonString = "{\"name\": \"John\", \"age\": 30}"
guard let jsonData = jsonString.data(using: .utf8) else {
    print("Failed to convert JSON string to data")
    return
}

do {
    let decoder = JSONDecoder()
    let person = try decoder.decode(Person.self, from: jsonData)
    print("Name: \(person.name), Age: \(person.age)")

    let encoder = JSONEncoder()
    encoder.outputFormatting = .prettyPrinted
    let encodedData = try encoder.encode(person)
    if let jsonString = String(data: encodedData, encoding: .utf8) {
        print("Encoded JSON String:\n\(jsonString)")
    }
} catch {
    print("Failed to parse JSON data: \(error)")
}

위의 예제에서는 Person이라는 Codable 프로토콜을 준수하는 구조체를 정의합니다. 이후에는 JSONDecoderJSONEncoder를 사용하여 JSON 데이터를 읽고 쓰는 작업을 수행합니다. decode(_:from:) 메서드를 사용하여 JSON 데이터를 디코딩하고, encode(_:) 메서드를 사용하여 구조체를 인코딩합니다.

결론

이렇게 Swift에서 JSON 데이터를 다루는 방법을 알아보았습니다. JSONSerialization 클래스를 사용하거나 Codable 프로토콜을 이용하여 손쉽게 JSON 데이터를 파싱하고 생성할 수 있습니다. JSON 데이터를 다루어야 하는 경우에는 이러한 기능들을 활용하여 보다 간편하게 작업할 수 있습니다.

참고 자료