본문 바로가기

iOS

iOS에서 42API 써보기 ! (3) JSONSerialization vs Codable

JSONSerialization

 

JSON을 Array 또는 Dictionary로 Array 또는 Dictionary를 JSON으로 바꿔주는 객체입니다.

Dictionary의 key 값은 String, Object 값은 String, Number, Array, Dictionary, Null 중에 하나여야 합니다.

 

제가 썼던 함수 2개입니다. 반환값이 Any이기 때문에 형을 맞춰줘야합니다. ex) as? [String : AnyObject] 

 

Codable

swift 4.0에서 소개

Decodable과 Encodable이라는 프토토콜을 둘 다 사용할 수 있는 타입입니다.

JSON 객체에서 변환하고 싶은 구조체를 Codable이라는 프로토콜을 사용해서 만들고 JSONDecoder를 사용해서 디코딩할 수 있습니다.

 

저는 이번 프로젝트에서 아래와 같이 Codable 구조체를 만들었습니다. 

 

그리고 JSONDecoder를 이용해서 데이터 변환을 해줬습니다.! decode()함수의 첫 번째 매개변수에는 변환할 타입들을 넣으면 됩니다.

 

Codable은 구조체를 미리 정의해 두었기 때문에 타입을 정의할 필요가 없고 일반 객체에 접근하듯이 .(dot)을 이용해서 접근 가능합니다. 

참고 사이트

app.quicktype.io/

제이슨 데이터를 긁어서 넣으면 구조체를 자동으로 만들어주는 사이트입니다. 

저는 이 사이트에서 구조체를 뽑아낸뒤 원하는 데이터만 넣었습니다. 

 

돌아보자.

이번 해커톤을 진행하면서 토큰 값을 가져올 떄 JSONSerialization을 썻는데 그뒤에 카뎃들의 정보를 가져올때 JSONSerialization를 써서 데이터를 가져올려고 시도했으나 너무.. 하드했습니다. 그렇게하다가 Codable을 만나고 .행복해졌습니다.

 

JSONSerialization은 복잡한 json을 다룰 경우 한번에 딱 그려지는 느낌은 아닙니다. 저는 토큰 값 하나만 가져오면 됬었어서 토큰값에서는 썼지만 API에서 얻은 json정보들은 엄척 복잡했습니다. Codable은 그냥 구조체만들어서 하면됩니다. 

 

복잡한 json을 JSONSerialization으로 다룰 경우

if let data = json["data"] as? [String : Any] {
	if let contentType = data["contentType"] as? [String] {
    
    }
}

이런 식으로 데이터를 파싱하고 그 파싱한 데이터에 다시 들어가서 키값으로 데이터를 찾는.. 과정을 거쳐야합니다.  타입도 다 지정을 해줘야함.. 

 

코다블은 그저 구조체 한방이면 끝 

 

결론

Codable짱;

'iOS' 카테고리의 다른 글

[iOS] UILabel  (0) 2021.01.26
[iOS] UITabBarController와 UITabBar의 차이  (0) 2021.01.26
iOS에서 42API 써보기 ! (2) URLSession  (0) 2020.12.23
iOS에서 42API 써보기 ! (1) getToken  (0) 2020.12.21
iOS) UIGestureRecognizer 종류  (0) 2020.04.26