[안드로이드] Json & Gson

김영훈·2020년 4월 20일
0
post-thumbnail
post-custom-banner

웹서버로부터 응답을 받았을 때 응답 데이터의 포맷이 JSON이라는 데이터 포맷으로 되어 있는 경우가 많습니다.
그렇다면 JSON은 무엇인가 알아보면..

JSON(Javascript Object Notation)

=> 네트워크를 통해 데이터를 주고받는데 사용되는 경량의 데이터 교환 형식.
JSON은 데이터 포맷, 데이터를 표시하는 표현 방법일 뿐.

JSON 구조

Json은 name : value 쌍으로 이루어져 있다.
Json의 객체란 name- value의 쌍의 집합이고, 집합의 쌍들은 서로 쉼표로 구분
name은 무조건 String 타입으로, 쌍따옴표를 이용해 표기합니다.

객체는 중괄호({,})를 이용해 만들 수 있고
여러 개의 객체가 들어있는 배열을 넣고 싶다면 대괄호([,])를 사용합니다.

GSON

GSON은 JSON 문자열을 객체로 변환해주는 라이브러리입니다.

Volley를 이용해 웹서버로부터 JSON 응답을 받았다면 GSON을 이용해 자바 객체로 바꾸고 그 객체 안에 들어있는 데이터를 사용하게 됩니다.

사용 방법

영화진흥위원회에서 제공하는 영화 정보 json을 활용한 예

1. 라이브러리 추가

GSON은 외부 라이브러리여서 build.gradle(Module:app) 파일에 dependencies의 중괄호 안에 다음의 코드를 작성해야합니다.

implementation 'com.google.code.gson:gson:2.8.2'

2. JSON 문자열의 속성에 맞는 자바 클래스 정의

  • 영화 정보 JSON에 맞추어 자바 객체를 만들고 싶다면 먼저 자바 클래스를 정의합니다.
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>();
}

3. 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;
}

4. Gson으로 변환하기

자바 클래스를 정의했다면 Gson을 이용해 자바 객체로 변환할 수 있습니다.

Gson gson = new Gson();
        MovieList movieList = gson.fromJson(response,MovieList.class);

Reference : https://www.edwith.org/boostcourse-android/lecture/17092/

post-custom-banner

0개의 댓글