Jiwift

[iOS/Swift] 구조체를 JSON 형태로 변환하기 struct to json 본문

iOS Dev/Swift

[iOS/Swift] 구조체를 JSON 형태로 변환하기 struct to json

지위프트 2024. 4. 12. 21:13
반응형

[iOS/Swift] 구조체를 JSON 형태로 변환하기 struct to json

 

안녕하세요. 오늘은 Codable로 구성된 Struct를 JSON으로 변경해 보겠습니다.

struct AllUsersModel: Codable {
    let users: [UserModel]
}

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

 우선 간단하게 Model을 두 개 만들었습니다. 사용자 정보를 담는 UserModel과 사용자를 담는 AllUsersModel로 구성했습니다. Codable을 채택하여 encode 할 수 있게 준비를 합니다.

 

let users: [UserModel] = [UserModel(name: "오바마", age: 34),
                          UserModel(name: "트럼프", age: 32),
                          UserModel(name: "장동건", age: 30),
                          UserModel(name: "미쉐린", age: 14)]

let allUsersModel: AllUsersModel = .init(users: users)

 모델 속 정보는 간단하게 위와 같이 준비하였습니다.

func createJsonData(model: AllUsersModel) {
    do {
        let jsonData = try JSONEncoder().encode(model.users)
        
        // 다운로드 JSON
        print(String(data: jsonData, encoding: .utf8)!)
    } catch {
        print("실패하였습니다.")
        return
    }
}

 그리고 위 코드가 Struct를 JSON으로 변경하는 함수입니다. 보시면 매우 간단하게 변경이 가능합니다. 이것이 Codable이 있기 때문에 가능합니다. 사실상 출력과 예외처리를 제외하면 한 줄로 끝나는 것을 볼 수 있습니다. encode 된 값은 Data 타입이기 때문에 출력하기 위해서는 String으로 다시 변환해줘야 하는데요. jsonData 자체를 JSON파일로 저장할 때는 굳이 변환을 하지 않아도 됩니다.

 

결과

 

 

 

 

--

전체 코드

struct AllUsersModel: Codable {
    let users: [UserModel]
}

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

let users: [UserModel] = [UserModel(name: "오바마", age: 34),
                          UserModel(name: "트럼프", age: 32),
                          UserModel(name: "장동건", age: 30),
                          UserModel(name: "미쉐린", age: 14)]

let allUsersModel: AllUsersModel = .init(users: users)

func createJsonData(model: AllUsersModel) {
    do {
        let jsonData = try JSONEncoder().encode(model.users)
        
        // 다운로드 JSON
        print(String(data: jsonData, encoding: .utf8)!)
    } catch {
        print("실패하였습니다.")
        return
    }
}

createJsonData(model: allUsersModel)

 

Swift ) 왕초보를 위한 Codable / JSON Encoding and Decoding (tistory.com)

 

Swift ) 왕초보를 위한 Codable / JSON Encoding and Decoding

안녕하세요 :) Zedd입니다.< 최신버전 확인하기 / App Udpate >글쓰다가 갑자기 Codable 개삘Swift4가 나오기전에, JSON 파싱이 Swift4에서는 한줄로 끝난단다 하는 유튜브 영상을 봐서 오옷했던 기억이 있네

zeddios.tistory.com

 

반응형