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
*/