Home JSON 개념 및 GSON
Post
Cancel

JSON 개념 및 GSON

JSON

JSON의 약자는 JavaScript Object Notation으로 Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한

문자 기반의 표준 포맷이다. 따라서 자바 스크립트 객체 포맷과 거의 동일하다.

웹 어플리케이션에서 데이터를 전송할 때 사용하고,

서버에서 클라이언트로 데이터를 전송하여 표현 하거나 반대의 경우에 사용한다.

Gson은 자바스크립트에서처럼 JSON 문자열을 객체로 변환할 수 있도록 해준다.

즉, JSON 문자열이 자바 객체로 만들어 질 수 있다.

Volley를 사용해서 웹 서버로부터 JSON 응답을 받았다면 Gson을 이용해서 자바 객체로 바꾸고

그 객체 안에 들어있는 데이터를 접근하여 사용할 수 있다.

Untitled Diagram drawio (1)


사용하기

Gson도 Volley처럼 외부 라이브러리이기 때문에 라이브러리를 추가해야 사용할 수 있다.

Gradle Scripts/build.gradle(Moudle: Project Name)

1
2
3
4
5
dependencies {
			...
    implementation 'com.android.volley:volley:1.2.0'
    implementation 'com.google.code.gson:gson:2.8.6'
}

Gson은 JSON 문자열을 자바 객체로 바꿔주는데 자바는 객체를 만들 때 클래스를 먼저 정의하는 과정을

거치므로 JSON 문자열을 자바 객체로 바꿀 때도 클래스를 먼저 정의 해야한다.

영화 정보를 가져온다고 가정하고 영화 정보 JSON 응답의 포맷에 맞추어 새로운 자바 클래스를 정의한다.


MovieList.java

1
2
3
public class MovieList {
    MovieListResult boxOfficeResult;
}

위의 변수 하나를 선언 했는데 이 변수의 자료형은 JSON 문자열 속성 값의 자료형과 같아야 하고, 변수 이름은 JSON 문자열에서 속성의 이름이 같아야 한다.

JSON 문자열에서 boxOfficeResult 속성의 값이 객체이므로 이 객체를 변환하여 담아둘 클래스를 선언하는데,

MovieListResult 이름으로 추가한다.


MovieListResult.java

1
2
3
4
5
6
7
8
public class MovieListResult {

    String boxofficeType;
    String showRange;

    ArrayList<Movie> dailyBoxOfficeList = new ArrayList<Movie>();

}

또한, ArrayList 배열 안에 다시 객체가 들어가므로 그를 위한 클래스를 추가로 만들어줘야한다.


Movie.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
}

참고로 위 문자열들은 영화 진흥 위원회 오픈 API에 명시되어 있는 응답 구조 변수들이다.

영화 진흥 위원회


MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MainActivity{
		... 중략 
    @Override
                    public void onResponse(String response) {
                        println("응답 -> " + response);

                        processResponse(response);
                    }		
                    ... 중략
	public void processResponse(String response) {  
	  Gson gson = new Gson();  
  
	  // JSON 문자열을 MovieList 객체로 변환하기  
	  MovieList movieList = gson.fromJson(response, MovieList.class);  
  
	  println("영화정보의 수 : " + movieList.boxOfficeResult.dailyBoxOfficeList.size());  
	}
}

결과

1

This post is licensed under CC BY 4.0 by the author.