아래 링크 Gson 라이브러리 주소입니다.
https://github.com/google/gson
간략히 설명드리면
Gson 라이브러리는
Java 객체를 Json으로 변환 또는 Json을 Java 객체로 변환하는 데 사용합니다.
toJson() 또는 fromJson() 메소드를 이용해서 간단하게 변환합니다.
(이번 예제는 fromJson() 메소드를 이용할 겁니다.)
<실행 화면> - Json으로 받아온 정보를 Gson 라이브러리를 이용하여 Java객체로 받아서 사용하였습니다.
이제 예제를 작성해 봅니다.
우선 Gson 라이브러리를 추가합니다.
Gradle:
dependencies {
implementation 'com.google.code.gson:gson:2.8.6'
}
보통 서버에서 Json 형식으로 데이터를 받아오지만, 간단한 예제를 위해 Json파일을 만들겠습니다.
그러기 위해선 app폴더 안에 assets 폴더를 만들고 그 안에 json 파일이 있어야 합니다.
이제 json 파일을 만들겠습니다.
jsonData.json
아래는 보기 좋기 위해 줄 바꿈을 했습니다. (실제 코드는 한 줄로 쭉 쓴 코드)
영화 관련 json 파일은 아래 사이트에서 제공 받을 수 있습니다.
(지금은 간단한 예제이기 때문에 영화 정보를 임의로 짧게 두 개 영화 정보만 있도록 줄였습니다.)
https://www.kobis.or.kr/kobisopenapi/homepg/apiservice/searchServiceInfo.do
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
{
"boxOfficeResult": {
"boxofficeType": "일별 박스오피스",
"showRange": "20120101~20120101",
"dailyBoxOfficeList": [{
"rnum": "1",
"rank": "1",
"rankInten": "0",
"rankOldAndNew": "OLD",
"movieCd": "20112207",
"movieNm": "미션임파서블:고스트프로토콜",
"openDt": "2011-12-15",
"salesAmt": "2776060500",
"salesShare": "36.3",
"salesInten": "-415699000",
"salesChange": "-13",
"salesAcc": "40541108500",
"audiCnt": "353274",
"audiInten": "-60106",
"audiChange": "-14.5",
"audiAcc": "5328435",
"scrnCnt": "697",
"showCnt": "3223"
}, {
"rnum": "2",
"rank": "2",
"rankInten": "1",
"rankOldAndNew": "OLD",
"movieCd": "20110295",
"movieNm": "마이 웨이",
"openDt": "2011-12-21",
"salesAmt": "1189058500",
"salesShare": "15.6",
"salesInten": "-105894500",
"salesChange": "-8.2",
"salesAcc": "13002897500",
"audiCnt": "153501",
"audiInten": "-16465",
"audiChange": "-9.7",
"audiAcc": "1739543",
"scrnCnt": "588",
"showCnt": "2321"
}]
}
}
|
우선 한 줄 짜리 json 코드를 위와 같이 보기 좋게 보고 싶다면?
아래 사이트에 한 줄 코드를 복붙 하고 Validate JSON버튼을 눌러주면 된다.
실제 jsonData.json 내용은 아래 코드와 같다. 줄바꿈이 들어가면 에러가 납니다. (줄 바꿈도 인식하기 때문에..)
jsonData.json
1
|
{"boxOfficeResult":{"boxofficeType":"일별 박스오피스","showRange":"20120101~20120101","dailyBoxOfficeList":[{"rnum":"1","rank":"1","rankInten":"0","rankOldAndNew":"OLD","movieCd":"20112207","movieNm":"미션임파서블:고스트프로토콜","openDt":"2011-12-15","salesAmt":"2776060500","salesShare":"36.3","salesInten":"-415699000","salesChange":"-13","salesAcc":"40541108500","audiCnt":"353274","audiInten":"-60106","audiChange":"-14.5","audiAcc":"5328435","scrnCnt":"697","showCnt":"3223"},{"rnum":"2","rank":"2","rankInten":"1","rankOldAndNew":"OLD","movieCd":"20110295","movieNm":"마이 웨이","openDt":"2011-12-21","salesAmt":"1189058500","salesShare":"15.6","salesInten":"-105894500","salesChange":"-8.2","salesAcc":"13002897500","audiCnt":"153501","audiInten":"-16465","audiChange":"-9.7","audiAcc":"1739543","scrnCnt":"588","showCnt":"2321"}]}}
|
이제 acitiviy_main.xml을 디자인 해봅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tv_movie_rank1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="영화 순위1"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.098"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.172" />
<TextView
android:id="@+id/tv_movie_name1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="영화 제목1"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.675"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.172" />
<TextView
android:id="@+id/tv_movie_rank2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="영화 순위2"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.098"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.333" />
<TextView
android:id="@+id/tv_movie_name2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="영화 제목2"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.675"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.333" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="152dp"
android:onClick="click_btn"
android:text="JSON File read"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintVertical_bias="0.198" />
|
MainActivity.java를 작성해 봅니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
package com.daonn.ex_gson;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.google.gson.Gson;
import org.json.JSONObject;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
TextView tvMovieRank1, tvMovieRank2;
TextView tvMovieName1,tvMovieName2;
String movieName1, movieName2;
String rank1, rank2;
Gson gson = new Gson();
static String TAG="MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvMovieRank1=findViewById(R.id.tv_movie_rank1);
tvMovieName1=findViewById(R.id.tv_movie_name1);
tvMovieRank2=findViewById(R.id.tv_movie_rank2);
tvMovieName2=findViewById(R.id.tv_movie_name2);
try{
InputStream is = getAssets().open("jsonData.json");
byte[] buffer = new byte[is.available()];
String json = new String(buffer, "UTF-8");
JSONObject jsonObject = new JSONObject(json);
//jsonObject=={"boxOfficeResult":{"boxofficeType":"일별 박스오피스","showRange":"20120101~20120101","dailyBoxOfficeList":[{"rnum":"1","rank":"1","rankInten":"0","rankOldAndNew":"OLD","movieCd":"20112207","movieNm":"미션임파서블:고스트프로토콜","openDt":"2011-12-15","salesAmt":"2776060500","salesShare":"36.3","salesInten":"-415699000","salesChange":"-13","salesAcc":"40541108500","audiCnt":"353274","audiInten":"-60106","audiChange":"-14.5","audiAcc":"5328435","scrnCnt":"697","showCnt":"3223"},{"rnum":"2","rank":"2","rankInten":"1","rankOldAndNew":"OLD","movieCd":"20110295","movieNm":"마이 웨이","openDt":"2011-12-21","salesAmt":"1189058500","salesShare":"15.6","salesInten":"-105894500","salesChange":"-8.2","salesAcc":"13002897500","audiCnt":"153501","audiInten":"-16465","audiChange":"-9.7","audiAcc":"1739543","scrnCnt":"588","showCnt":"2321"}]}}
Map<String,Object> boxOfficeResult= gson.fromJson( jsonObject.get("boxOfficeResult").toString(),new TypeToken<Map<String, Object>>(){}.getType());
//boxOfficeResult=={boxofficeType=일별 박스오피스, showRange=20120101~20120101, dailyBoxOfficeList=[{rnum=1, rank=1, rankInten=0, rankOldAndNew=OLD, movieCd=20112207, movieNm=미션임파서블:고스트프로토콜, openDt=2011-12-15, salesAmt=2776060500, salesShare=36.3, salesInten=-415699000, salesChange=-13, salesAcc=40541108500, audiCnt=353274, audiInten=-60106, audiChange=-14.5, audiAcc=5328435, scrnCnt=697, showCnt=3223}, {rnum=2, rank=2, rankInten=1, rankOldAndNew=OLD, movieCd=20110295, movieNm=마이 웨이, openDt=2011-12-21, salesAmt=1189058500, salesShare=15.6, salesInten=-105894500, salesChange=-8.2, salesAcc=13002897500, audiCnt=153501, audiInten=-16465, audiChange=-9.7, audiAcc=1739543, scrnCnt=588, showCnt=2321}]}
//jsonList==[{rnum=1, rank=1, rankInten=0, rankOldAndNew=OLD, movieCd=20112207, movieNm=미션임파서블:고스트프로토콜, openDt=2011-12-15, salesAmt=2776060500, salesShare=36.3, salesInten=-415699000, salesChange=-13, salesAcc=40541108500, audiCnt=353274, audiInten=-60106, audiChange=-14.5, audiAcc=5328435, scrnCnt=697, showCnt=3223}, {rnum=2, rank=2, rankInten=1, rankOldAndNew=OLD, movieCd=20110295, movieNm=마이 웨이, openDt=2011-12-21, salesAmt=1189058500, salesShare=15.6, salesInten=-105894500, salesChange=-8.2, salesAcc=13002897500, audiCnt=153501, audiInten=-16465, audiChange=-9.7, audiAcc=1739543, scrnCnt=588, showCnt=2321}]
//dailyBoxOfficeList에 있는 값을 자유롭게 사용 가능하다.
// (0) 첫번째 영화 정보
// (1) 첫번째 영화 정보
}catch (Exception e){e.printStackTrace();}
}// onCreate()..
public void click_btn(View view) { //버튼 클릭
tvMovieName1.setText(movieName1);
tvMovieRank1.setText(rank1);
tvMovieName2.setText(movieName2);
tvMovieRank2.setText(rank2);
}
}
|
<실행 화면> - Json으로 받아온 정보를 Gson 라이브러리를 이용하여 Java객체로 받아서 사용하였습니다.
<이해편 - JSONObject List,Map 으로 저장 방법>
2020/03/21 - [안드로이드/개발자 일상] - 안드로이드 JSONObject를 List, Map으로 저장하는 팁
<응용편 - RecycelerView로 표현>
영화 정보가 ArrayList에 담겼기 때문에, 나중에 RecycelerView로 표현할 때 편할 것입니다.
RecycelerView로 표현은 아래 링크로 가시면 됩니다. (현재 예제 응용 버전)
2020/03/20 - [안드로이드/개발자 일상] - 안드로이드 Gson 라이브러리 (JSON 파일을 만들어서 Gson 이용 + RecyclerView)
'안드로이드 > 개발자 일상' 카테고리의 다른 글
안드로이드 JSONObject를 List, Map으로 저장하는 팁 (14) | 2020.03.21 |
---|---|
안드로이드 Gson 라이브러리 (JSON 파일을 만들어서 Gson 이용 + RecyclerView) (5) | 2020.03.21 |
안드로이드 앱 권한 요청 라이브러리 AutoPermissions (2) | 2020.03.17 |
안드로이드 다른 모양 버튼(custom button) 만들기 (0) | 2020.03.15 |
안드로이드 SharedPreferences 값 저장하고, 불러오기. (3) | 2020.03.12 |
댓글