티스토리 뷰

Codable - JSON 날짜 디코딩 쉽게 하기

오늘은 Codable을 활용하여 JSON 디코딩을 할 때 알아두면 좋을 팁을 소개해드리려고 합니다!


예를 들어 아래와 같은 타입의 데이터가 있다고 가정해보겠습니다.

{
	"name": "hyeon",
	"createdAt": "2021-05-02T20:48:10"
}

 

보통 createdAt을 String으로 받고, DateFormatter로 date로 변환시켜서 사용하셨을 것 같습니다.

struct Info: Codable {
	let name: String
    let createdAt: String
}

// decode
let response = try JSONDecoder().decode(Info.self, from: data)

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let date = dateFormatter.date(from: response.createdAt)

이렇게 date 값을 가지고 올 수 있었죠.

그렇다면 이번에는 새로운 방법이 있습니다.
Info의 createdAt을 아예 Date로 설정해서 디코딩할 때 바로 해당 형식으로 디코딩 될 수 있는데요.

struct DateInfo: Codable {
	let name: String
    let createdAt: Date
}

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"

let dateDecoder = JSONDecoder()
dateDecoder.dateDecodingStrategy = .formatted(dateFormatter)
let response = dateDecoder.decode(DateInfo.self, from: data)

DateFormatter 설정은 똑같이 진행하고,
Decoder에서 date decoding strategy를 해당 dateFormatter의 형식으로 할거다!!고 설정해주면
dateDecoder를 써서 디코딩을 하는 경우에는 Date를 전부 위의 형식으로만 받아들이게 된다는 것입니다!
물론 "2021-05-02 15:11" 처럼 다른 형식의 값이 오면 에러가 나겠지만요..


아주 간단하게 Date를 디코딩 하는 방법에 대해 알아보았습니다!

Codable은 정말 강력한 JSON Parsing 타입인데요, 이 (저한테만 새로운) 기능을 통해서 더욱 편리하게 코더블을 사용하시길 바랍니다!

댓글