Gson + Retrofit + RxAndroid이용해 JSON파싱할 때 Nested Array 처리
파싱이란걸 하려고 보면, 저의 작은 희망과는 다르게;;;
중첩된 JSON을 많이 보게 되지요.
구글님이 만들어주신 GSON은
JSON 객체를 Java객체로 만들어줘서
코딩을 편하게 해주는데요.
중첩된 배열의 Json을 어떻게 파싱하는지
정리해보고자 합니다.
참고로 여기서 저는
GSON + RxAndroid + Retrofit
조합으로 사용을 하고 있는데요.
장점이 많은 조합이라고 생각하는데,
구체적인 사용법은 따로 글로 한번 정리하려고 합니다.
1. 파싱할 JSON분석
먼저 서버에서 JSON이 이렇게 내려온다고 가정해볼께요.
배열을 품고 있는 중첩 Json 객체이네요. 이제 시작해봅니다.
2. JSON과 동일한 모델 클래스 생성
우선은 파싱할 JSON 객체의 구조와 동일하게 모델 클래스를 만들어야 겠네요.
이 과정은 모든 GSON을 이용한 파싱에 동일하게 적용됩니다.
Student클래스를 담고있는 SchoolData라는 클래스를 ArrayList객체로 생성하였습니다.
배열보다는 ArrayList가 사용하기 편해서 이렇게 하였네요.
3. Retrofit Interface정의
다음은 레트로핏에서 인터페이스를 정의할 차례입니다.
요때 RxAndroid를 사용하므로,
Observable로 바로 SchoolData를 흘려보내줍니다.
혹시 RxAndroid에 관심이 있으시면 저의 이전 글을 참고해주셔도 좋을 것 같습니다~ :)
이번에는 urlEncoded의 post방식으로 서버에 요청하는 형태를 취하여 보았습니다.
4. GSON을 이용한 파싱
이제 드디어 GSON이네요.
보통은 GSON을 이용할때, GSON객체를 만들어서 사용을 하지만,
Retrofit은 GSON컨버터를 이용할 수 있게 제공하므로 훨씬 간편합니다.
Retrofit에 OKHTTP를 연결해서 사용하시는 분들도 많고,
build해서 사용하는 방법은 여러가지 이겠지만,
addConverterFactory 를 해주어야 하는 것은 동일합니다.
Gson객체를 매번 생성할 필요가 없다는 게 큰 장점입니다~.
4. MainClass에서 사용하기
Retrofit의 interface에서 정의해두었던 getSchoolData()를 이용해서
SchoolData라고 하는 객체를 GSON으로 부터 받아올 수 있습니다.
(위에서 설명한대로, retrofit이 컨버팅해서 넘겨주기때문에 따로 걱정할 필요가 없습니다.)
그런데, 우리가 받아오는 (Gson이 컨버팅한) 것은 Java객체입니다.
위에서 봤던 JSON구조를 다시 보면,
이 객체안에 배열들이 있음을 다시 확인해 볼 수 있습니다.
이제 해야할 것은,
ArrayList를 만들어서
retrofit을 통해, rxandroid로 부터받은(gson컨버터를 이용해 변환된) Java객체인 SchoolData를 넣어준다음
그것을 반복문으로 풀어서 사용하는 것입니다.
다시 정리하면,
GSON이 파싱해서 우리에게 준, 중첩된 배열을 가진 클래스를
ArrayList에 담아서 풀어서 쓴다
요것이 핵심이었네요 ;;;
사실 retrofit이나 RxAndroid를 쓰지 않고도,
Gson객체 생성해서 파싱을 해서 쓸때도 활용할 수 있을 것 같습니다~.