붱이 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 |