Gson은 외부라이브러리이어서 build.gradle(Module: app) 파일을 열고 dependencies의 중괄호 안에 다음 코드를 추가해야 사용할 수 있습니다.
implementation 'com.google.code.gson:gson:2.8.2'
자바스크립트는 객체의 포맷이 객체 안에 속성들이 들어가 있는 구조를 가지고 있지만 자바의 객체는 그런 구조가 아니라서 JSON 문자열을 자바 객체로 변환하기 위해서는 먼저 자바 클래스를 정의해야 합니다.
자바 클래스는 일종의 붕어빵 틀이고 이 틀에서 각각의 붕어빵을 만들어낼 수 있기 때문에 JSON 문자열에 들어있는 속성들에 맞추어 붕어빵 틀을 먼저 정의해야 자동 변환이 가능합니다.
JSON 문자열의 속성에 맞는 자바 클래스 정의
영화진흥위원회에서 제공하는 영화 정보 JSON에 맞추어 자바 객체를 만들고 싶다면 먼저 자바 클래스를 정의합니다.
public class MovieList {
MovieListResult boxOfficeResult;
}
응답 데이터의 가장 바깥이 중괄호이므로 이 객체를 변환할 클래스로 MovieList라는 이름의 클래스를 정의합니다.
이 클래스 안에는 boxOfficeResult라는 이름의 변수를 추가합니다.
여기에서 변수의 이름은 JSON 문자열에서 속성의 이름과 같습니다.
그리고 변수의 자료형은 JSON 문자열에서 속성값의 자료형과 같습니다.
JSON 문자열에서 boxOfficeResult 속성의 값이 다시 객체이므로 이 객체를 변환하여 담을 클래스를 MovieListResult라는 이름으로 만들고 boxOfficeResult 속성의 자료형으로 지정합니다.
public class MovieListResult {
String boxofficeType;
String showRange;
ArrayList<Movie> dailyBoxOfficeList = new ArrayList<Movie>();
}
JSON 문자열에서 배열의 표현
JSON 문자열의 속성 중에서 값이 배열인 경우, 즉 대괄호로 표시된 경우에는 자바 클래스를 정의할 때 ArrayList 자료형을 사용할 수 있습니다.
그리고 그 배열 안에 다시 객체들이 들어가는 경우 해당 객체들을 위한 자바 클래스를 또 만들어야 합니다.
이 클래스는 ArrayList의 제네릭 타입으로 지정됩니다.
ArrayList<Movie> dailyBoxOfficeList = new ArrayList<Movie>();
여기에서 배열 안에 들어가는 Movie 객체는 다음과 같이 영화 정보를 담을 변수들을 포함하게 됩니다.
public class Movie {
String rnum;
String rank;
String rankInten;
String rankOldAndNew;
String movieCd;
String movieNm;
String openDt;
String salesAmt;
String salesShare;
String salesInten;
String salesChange;
String salesAcc;
String audiCnt;
String audiInten;
String audiChange;
String audiAcc;
String scrnCnt;
String showCnt
}
Gson으로 변환하기
자바 클래스를 정의했다면 Gson을 이용해 변환할 수 있습니다.
Gson gson = new Gson();
MovieList movieList = gson.fromJson(response, MovieList.class);
자바 객체로 변환되었으니 필요한 변수들의 값을 확인하기가 아주 쉬워졌죠?
최근댓글