웹서버로부터 응답을 받았을 때 응답 데이터의 포맷이 JSON이라는 데이터 포맷으로 되어 있는 경우가 많습니다.
그렇다면 JSON은 무엇인가 알아보면..
=> 네트워크를 통해 데이터를 주고받는데 사용되는 경량의 데이터 교환 형식.
JSON은 데이터 포맷, 데이터를 표시하는 표현 방법일 뿐.
JSON 구조
Json은 name : value 쌍으로 이루어져 있다.
Json의 객체란 name- value의 쌍의 집합이고, 집합의 쌍들은 서로 쉼표로 구분
name은 무조건 String 타입으로, 쌍따옴표를 이용해 표기합니다.
객체는 중괄호({,})를 이용해 만들 수 있고
여러 개의 객체가 들어있는 배열을 넣고 싶다면 대괄호([,])를 사용합니다.
GSON은 JSON 문자열을 객체로 변환해주는 라이브러리입니다.
Volley를 이용해 웹서버로부터 JSON 응답을 받았다면 GSON을 이용해 자바 객체로 바꾸고 그 객체 안에 들어있는 데이터를 사용하게 됩니다.
영화진흥위원회에서 제공하는 영화 정보 json을 활용한 예
GSON은 외부 라이브러리여서 build.gradle(Module:app) 파일에 dependencies의 중괄호 안에 다음의 코드를 작성해야합니다.
implementation 'com.google.code.gson:gson:2.8.2'
public class MovieList { // 속성의 이름이 변수명이 되고 값의 타입이 변수의 타입이 되게 만든다.
MovieListResult boxOfficeResult;
}
응답 데이터의 가장 바깥이 중괄호이므로 이 객체를 변환한 클래스로 MovieList라는 이름의 클래스를 정의합니다.
json 문자열에서 속성의 이름을 변수명으로 하고
자료형은 json 문자열에서 속성값의 자료형과 똑같이 정의합니다.
json 문자열에서 boxOfficeResult 속성의 값이 다시 객체이므로 이 객체를 변환하여 담을 클래스를 MovieListResult라는 이름으로 만들고 boxOfficeResult 속성의 자료형으로 지정합니다.
public class MovieListResult {
String boxofficeType;
String showRange;
ArrayList<Movie> dailyBoxOfficeList = new ArrayList<Movie>();
}
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 = new Gson();
MovieList movieList = gson.fromJson(response,MovieList.class);
Reference : https://www.edwith.org/boostcourse-android/lecture/17092/