JSON Encoding과 Decoding

  • JSON Encoding은 인스턴스를 JSON으로 만드는 것이고, JSON Decoding을 JSON 객체를 인스턴스로 만드는 것이다.
  • Codable을 채택하면 Encodable과 Decodable을 다 채택하게 된다.
  • 간단한 예제를 통해서 구조체 인스턴스를 JSON으로, JSON 데이터를 다시 구조체 인스턴스로 만들어 볼 것이다.
import Foundation // Codable 채택을 위해 Foundation을 import 한다.

// Encoding, Decoding을 위한 Encoder, Decoder 생성
let encoder = JSONEncoder()
let decoder = JSONDecoder()

// JSON으로 Encoding, Decoding될 구조체 정의
struct Person: Codable {
    var name: String
    var age: Int
    var home: String
    var hasJob: Bool
}

// person1 인스턴스 생성
let person1 = Person(name: "홍두깨", age: 38, home: "서울시", hasJob: false)

// JSON Encoding [ struct -> JSON ]
let jsonData = try encoder.encode(person1)

if let jsonString = String(data: jsonData, encoding: .utf8) {
    print(jsonString) // {"age":38,"home":"서울시","hasJob":false,"name":"홍두깨"}
    
    // 만약 정렬 방식을 바꾸고 싶다면
    encoder.outputFormatting = .prettyPrinted
    print(jsonString)
    /*
     {
     "age" : 38,
     "home" : "서울시",
     "hasJob" : false,
     "name" : "홍두깨"
     }
     */
}

////////////////////////////////////////////////////////

// JSON Decoding [ JSON -> struct ]
let person2 = try decoder.decode(Person.self, from: jsonData)

dump(person2)
/*
 __lldb_expr_3.Person
 - name: "홍두깨"
 - age: 38
 - home: "서울시"
 - hasJob: false
*/