본문 바로가기
개발/Swift

Swift Json to Dictionary - Json을 Dictionary로 변환하는 방법

by Wrmoon 2023. 7. 28.
반응형

Swift

Swift에서 객체를 JSON을 Dictionary로 변환하는 방법

Swift에서는 객체를 JSON 형식으로 인코딩하고, 다시 해당 JSON을 Dictionary로 변환하는 작업이 자주 필요합니다. 이를 위해 Codable 프로토콜을 사용하여 객체를 JSON으로 인코딩하고, JSONSerialization을 사용하여 JSON을 다시 Dictionary로 디코딩하는 방법을 살펴보겠습니다.

1. Codable 프로토콜 준수

먼저, 객체를 JSON으로 인코딩하려면 해당 객체가 Codable 프로토콜을 준수해야 합니다. CodableEncodableDecodable 프로토콜의 별칭으로, 객체를 인코딩(직렬화)하고 디코딩(역직렬화)하는 데 사용됩니다. 아래와 같이 클래스 또는 구조체를 Codable로 선언해봅시다.

struct Person: Codable {
    var name: String
    var age: Int
    var email: String
    // 다른 프로퍼티들도 있을 수 있습니다.
}

2. 인코딩(Encoding) - 객체를 JSON으로 변환

Swift의 JSONEncoder를 사용하여 객체를 JSON으로 인코딩할 수 있습니다.

import Foundation

func encodeObjectToJson<T: Codable>(_ object: T) -> String? {
    let encoder = JSONEncoder()
    encoder.outputFormatting = .prettyPrinted // 선택 사항: 가독성을 위해 들여쓰기가 적용된 JSON으로 만듭니다.

    do {
        let jsonData = try encoder.encode(object)
        if let jsonString = String(data: jsonData, encoding: .utf8) {
            return jsonString
        }
    } catch {
        print("Error encoding object to JSON: \(error.localizedDescription)")
    }
    return nil
}

3. 디코딩(Decoding) - JSON을 Dictionary로 변환

Swift의 JSONSerialization을 사용하여 JSON을 Foundation 데이터 구조로 변환하고, 이를 Dictionary로 캐스팅합니다.

func jsonStringToDictionary(_ jsonString: String) -> [String: Any]? {
    if let jsonData = jsonString.data(using: .utf8) {
        do {
            if let dictionary = try JSONSerialization.jsonObject(with: jsonData, options: []) as? [String: Any] {
                return dictionary
            }
        } catch {
            print("Error converting JSON string to dictionary: \(error.localizedDescription)")
        }
    }
    return nil
}

4. 변환 작업 실행하기

이제 encodeObjectToJson 함수를 사용하여 객체를 JSON으로 인코딩한 뒤, jsonStringToDictionary 함수를 사용하여 JSON을 다시 Dictionary로 변환합니다.

let person = Person(name: "John Doe", age: 30, email: "john.doe@example.com")

// 객체를 JSON으로 인코딩하여 문자열로 반환
if let jsonString = encodeObjectToJson(person) {
    console.log("JSON String:");
    console.log(jsonString);

    // JSON 문자열을 다시 Dictionary로 변환
    if let dictionary = jsonStringToDictionary(jsonString) {
        console.log("\nDictionary:");
        console.log(dictionary);
    }
}

결론

Swift에서 Codable 프로토콜과 JSONSerialization을 조합하여 객체를 JSON으로 인코딩하고, 다시 JSON을 Dictionary로 변환하는 방법을 알아보았습니다. 이를 통해 Swift 언어를 활용하여 JSON 데이터를 더 쉽게 다룰 수 있습니다. 감사합니다!

반응형

댓글