붱이 Story
안드로이드에서 json 파싱 노가다를
아주 간단히 한 두줄로 끝낼수 있는 강력한 방법
GSON
Gson?
Gson에 대해 알아보자
상세 설명은 링크로 대체 ㅎㅎ
너무 설명을 잘하셔서...
내가 처음 GSON 을 알고
사용법을 익히기위해
찾아본 blog에는
솔직히 너무 기본적인 내용밖에 없었다
이런느낌?
<PPT를 만들기법>
ppt를 띄운다
제목란에 제목을 쓴다
내용에 내용을 쓴다.
실전에 활용하기엔 역부족
요근래 GSON에 대해서 문의가 많이 들어와서
설명해주기 힘들었었다.
정리해두면 다른 사람들이 또 질문했을때 유용할듯
예제설명을 위한 가상 app을 예제로 설명을 해보려한다.
(추후 만들예정)
은쟈 요구사항(실제 몇달전 요청했었다)
"화장품 사면 유효기간이 언제까지인지 까먹다가 못쓰는 화장품이 많은데
앱에 유효기간을 저장해두고 시간이되면 알려주는 앱 만들어주면 안되?"
생각해보니 나도 쿠폰 같은거 받아두고
그전에 써야지 생각하고 보면 이미 유효기간 아웃..
해서 화장품뿐만 아니라 쿠폰, 가전제품 등의
유효기간 이나 A/S 기간이 있는 것들에 대해서 확장하여 구상을 했다.
앱에서 보여줄 필요한 정보들
예시
> Category
전자제품
가구
화장품
음식
약제
쿠폰
+ 사용자 얼마든지
> Item
분류 : Category중에 하나꼭 선택
제품명 : 다이슨 선풍기 AM-07
생성일 : 만든날 또는 구입일
만료일 : 유효기간 or A/S기간
제품 img : list형태
영수증img : list형태
대표 img : 제품 img중에 하나 선택하게
알람 : 만료기간 몇일전 알람
Json Sample에 대응되는 class
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 |
// 여기서 final은 상속불가를 위해 선언
public final class ExpireData {
// @SerializedName의 값은 json에서 Object로 파싱 되어질 때 key의 name이다.
// 변수명은 달라도 된다. 이왕이면 같게
// Catetory 리스트 Type이 Category로 되어있다
public @SerializedName("categories") ArrayList<Category> categories;
// Item 리스트 Type이 Item으로 되어있다
public @SerializedName("items") ArrayList<Item> items;
// inner class는static으로
// 위 categories에 들어갈 Category Class
public static final class Category {
public @SerializedName("name") String name;
public @SerializedName("icon") String icon;
public Category(String name, String icon) {
this.name = name;
this.icon = icon;
}
}
// 위 items에 들어갈 Item Class
public static final class Item {
public @SerializedName("name") String name;
public @SerializedName("category") String category;
public @SerializedName("createDate") String createDate;
public @SerializedName("expireDate") String expireDate;
// 제품 이미지는 여러장이 될수 있기 때문에 ArrayList
public @SerializedName("productImgs") ArrayList<String> productImgs;
public @SerializedName("receiptImg") String receiptImg;
public @SerializedName("alarm") String alarm;
public Item(String name, String category, String createDate, String expireDate,
ArrayList<String> productImgs, String receiptImg, String alarm) {
this.name = name;
this.category = category;
this.createDate = createDate;
this.expireDate = expireDate;
this.productImgs = productImgs;
this.receiptImg = receiptImg;
this.alarm = alarm;
}
}
} |
cs |
test용도이니 getter setter 및 생성자는
개발자 입맛에 맞게 변경~~
Json Sample
json 이쁘게 node로 볼수 있는 사이트
http://jsonviewer.stack.hu/
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 |
{
"categories": [
{
"name": "Electronic",
"icon": "electronicIcon.png"
},
{
"name": "Cosmetic",
"icon": "cosmeticIcon.png"
},
{
"name": "Food",
"icon": "foodIcon.png"
}
],
"items": [
{
"name": "TV",
"category": "Electronic",
"createDate": "2017-06-01",
"expireDate": "2018-06-01",
"productImgs": [
"productimg01.png",
"productimg02.png"
],
"receiptImg": "receipt.png",
"alarm": "2018-05-15 09:00"
},
{
"name": "Founder",
"category": "Cosmetic",
"createDate": "2017-06-01",
"expireDate": "2018-06-01",
"productImgs": [
"productimg01.png"
],
"receiptImg": "receipt.png",
"alarm": "2018-05-15 AM 9:00"
},
{
"name": "Water melon",
"category": "Food",
"createDate": "2017-06-01",
"expireDate": "2018-06-01",
"productImgs": [
"productimg01.png",
"productimg02.png",
"productimg03.png"
],
"receiptImg": "receipt.png",
"alarm": "2018-05-15AM9: 00"
}
]
} |
cs |
ExpireData 생성
cs
Gson을 이용한 ExpireData to json
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 |
Gson gson = new Gson();
String json = gson.toJson(expireData);
//결과
{
"categories": [
{
"icon": "electronicIcon.png",
"name": "Electronic"
}
],
"items": [
{
"alarm": "2018-05-15 09:00",
"category": "Electronic",
"createDate": "2017-06-01",
"expireDate": "2018-06-01",
"name": "TV",
"productImgs": [
"productimg01.png",
"productimg02.png"
],
"receiptImg": "receipt.png"
}
]
} |
cs |
이경우는 사용자가 입력한 data를
json파일로 저장할때 쓰인다.
저장한 json은 app이 로딩될때
아래와 같은 방법으로 파싱되어
app에서 보여질수 있다~
Gson을이용한 json to ExpireData
1
2
3 |
// 단 두줄로... json을 parsing 하여 Object에 바로 담아준다
Gson gson = new Gson();
ExpireData getExpireData = gson.fromJson(json, ExpireData.class); |
cs |
app에서 기존 저장된 json data를
불러올때 쓰거나
server에서 받아온 json을
정해진 class타입에 맞게 파싱할때 쓰인다.
위에 설명해준 @SerializedName 의 값에 의해
파싱이 되니 꼭 이름이 같아야한다!!
문의사항은 댓글남겨주세요
※ 공감 및 댓글 한마디는 포스팅하는데 큰 힘이 됩니다.
'붱이 Story > 개발' 카테고리의 다른 글
SmartApp Owl messenger bot 개발 (1) | 2019.09.09 |
---|---|
Awair 어웨어 2세대 구입 및 SmartApp 개발 (7) | 2019.05.05 |
Google Calendar를 이용한 휴일 센서 - My Day-off SmartThings SmartApp (11) | 2019.04.25 |
Kotlin 첫 시작 - 흥미로운것들 (0) | 2018.07.03 |
GearS2 GearS3 필수앱 선정 eureCar 유레카(주차장위치메모) (3) | 2017.05.29 |