1. 개요
자바스크립트 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷입니다. 웹에서 데이터를 전송할 때 일반적으로 사용합니다.
JSON 포맷의 데이터는 기본적으로 다음과 같이 표현됩니다.
1) 객체는 중괄호 {}로 표기합니다.
2) 배열은 대괄호 []로 표기합니다.
3) 각 변수는 변수 이름과 변수의 값으로 구성되어 있으며, 콜론 : 로 구분합니다.
4) 속성이 여러 개인 경우 쉼표 , 로 구분합니다.
2. 예시
아래 텍스트는 영화진흥위원회의 API 서비스를 사용해 영화 정보를 조회한 결과입니다.
이 데이터를 통해서 설명드리겠습니다.
// 1) TopMovieList
{
"movieListResult" :
{ // 2) movieListResult
"totCnt":2,"source":"영화진흥위원회","movieList" :
[ // 3) movieList
{ // 4) movieListItem
"movieCd":"20204117",
"movieNm":"모가디슈",
"movieNmEn":"Escape from Mogadishu",
"prdtYear":"2021","openDt":"20210728",
"typeNm":"장편",
"prdtStatNm":"개봉",
"nationAlt":"한국",
"genreAlt":"액션,드라마",
"repNationNm":"한국",
"repGenreNm":"액션",
"directors" : [
{"peopleNm":"류승완"} // 5) directorsInfo
],
"companys" : [ // 6) companysInfo
{"companyCd":"20160941","companyNm":"(주)덱스터스튜디오" },
{"companyCd":"20100374","companyNm":"(주)외유내강"},
{"companyCd":"20186561","companyNm":"(주)필름케이"}
]
},
{
"movieCd":"20194306",
"movieNm":"모가디슈에서 온 소녀",
"movieNmEn":"A Girl from Mogadishu ",
"prdtYear":"2019","openDt":"",
"typeNm":"장편","prdtStatNm":"기타",
"nationAlt":"이스라엘,벨기에,기타",
"genreAlt":"드라마",
"repNationNm":"이스라엘",
"repGenreNm":"드라마",
"directors" : [],
"companys" : []
}
]
}
}
1) TopMovieList
모든 정보를 포괄하는 하나의 객체입니다. 이름이 나와있지 않지만, 편의상 TopMovieList라고 표현하겠습니다.
2) movieListResult
TopMovieList 안에 포함된 객체입니다.
각 속성이 콜론 : 으로 구분되기에, 이것도 속성입니다.
이 경우 movieListResult라는 속성 이름과 중괄호 {}로 묶인 객체라는 속성의 값이 있습니다.
이 경우 movieListResult는 중괄호 {}로 묶인 객체의 값을 가지며, 이 경우 "totCnt", "source", "movieList"라는 이름의 속성들(데이터 클래스로 표현하자면 파라미터)를 가집니다.
또한 movieListResult라는 이름의 객체를 TopMovieList가 갖고 있습니다.
3) movieList
대괄호 []로 포함된 배열을 나타내는 변수입니다.
이 예시에서는 총 2개의 값을 가집니다.
4) movieListItem
중괄호 {} 로 묶인 객체는 이름은 따로 지정되어있지 않지만 편의상 movieListItem이라고 설정하겠습니다. 이 변수는 movieCd부터 companys까지의 값을 갖는 변수이며, 총 2개의 movieListItem이 movieList 배열에 있습니다.
movieCd부터 각 변수들은 콜론 : 다음 값을 가집니다.
5) directorsInfo
중괄호 {} 로 묶인 객체의 배열 변수입니다. 이때 이 객체를 편의상 directorsInfo라고 하겠습니다.
이 객체는 내부에 peopleNm이라는 변수를 갖고 있습니다.
6) companysInfo
중괄호 {} 로 묶인 객체의 배열 변수입니다. 이때 이 객체를 편의상 companysInfo라고 하겠습니다.
이 모든 정보들을 안드로이드에서 조회하기 위해서는 각각의 객체에 대응하는 데이터 클래스를 만들어야 합니다.
아래 코드는 그에 해당하는 데이터 클래스들입니다.
[TopMovieList]
data class TopMovieList(
val movieListResult: MovieListResult
)
[MovieListResult]
data class MovieListResult(
val totCnt: Int?,
val source: String?,
val movieList: ArrayList<MovieListItem>?
)
[MovieListItem]
data class MovieListItem(
val movieCd: String?,
val movieNm: String?,
val movieNmEn: String?,
val prdtYear: String?,
val openDt: String?,
val typeNm: String?,
val prdtStatNm: String?,
val nationAlt: String?,
val genreAlt: String?,
val repNationNm: String?,
val repGenreNm: String?,
val directors: ArrayList<DirectorInfo>?,
val companys: ArrayList<CompanyInfo>?
)
[DirectorInfo]
data class DirectorInfo(
val peopleNm: String?,
val peopleNmEn: String?
)
[CompanyInfo]
data class CompanyInfo(
val companyNm: String?,
val companyPartNm: String?
)
이제 이 데이터 클래스를 사용하면 웹에서 요청한 정보를 적절하게 처리할 수 있습니다.
3. 마무리
이번 시간에는 JSON 객체에 대해서 간단하게 알아보았습니다. 이제 JSON 문자열 객체를 웹에서 요청해서 받으면, 이를 적절히 처리해 원하는 기능을 구현할 수 있습니다.
웹서버에 데이터를 요청하는 것은 Volley 부분에서, 요청받은 데이터를 처리하는 부분은 GSON 부분에서 다루도록 하겠습니다.
'Android > 꼭 공부해야 할 라이브러리' 카테고리의 다른 글
예제로 알아보는 ExoPlayer (1) | 2021.10.06 |
---|---|
예제로 알아보는 DiffUtil - RecyclerView 성능을 향상하자! (0) | 2021.10.03 |
Room 을 사용해 데이터를 관리하자! with 사용법과 예제 (0) | 2021.10.02 |
[웹에서 데이터 가져오기] 3. GSON (0) | 2021.09.29 |
[웹에서 데이터 가져오기] 2. Volley (0) | 2021.09.28 |