# [Android] GSON을 사용한 JSON 데이터 파싱

> JSON 데이터 원문 과정 GSON 의존성 추가 대응하는 Java bean 클래스 생성 Gson을 사용한 파싱 Release 난독화 설정 완료!

- 게시일: 2018-06-03
- 태그: Android, Android 개발, Gson, JSON
- HTML 버전 보기: https://bilibili.cat/ko/posts/android-gson-start
- 中文에서 AI 번역: https://bilibili.cat/posts/android-gson-start

---

## JSON 데이터 원문

```JavaScript
[
    {id:1,name:"酒吞童子",cv:"阪口周平"},
    {id:2,name:"茨木童子",cv:"福山润"},
    {id:3,name:"大天狗",cv:"前野智昭"},
    {id:4,name:"荒川之主",cv:"子安武人"}
]
```

## 과정

### GSON 의존성 추가

```kotlin
compile 'com.google.code.gson:gson:2.2.4'
```

### 대응하는 Java bean 클래스 생성

```Java
public class Shikigami{
        @SerializedName("id")// 为防止混淆后无法匹配
        public int id;
        @SerializedName("name")
        public String name;
        @SerializedName("cv")
        public String cv;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public String getCv() {
            return cv;
        }

        public void setCv(String cv) {
            this.cv = cv;
        }
    }
```

### Gson을 사용한 파싱

```Java
//  解析JSON数据
Gson gson = new Gson();
List<Shikigami> shikigamiLists = gson.fromJson(json, new TypeToken<List<Shikigami>>() {}.getType());
// 取得数据
String name = shikigamiLists.get(index).name;
tring cv = shikigami.get(index).cv;
```

### Release 난독화 설정

```
-dontwarn
# okhttp混淆配置
-keep class com.squareup.okhttp.** { *;}
-dontwarn com.squareup.okhttp.**
-dontwarn okio.**
# Gson混淆配置
-keepattributes Signature
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
# Application classes that will be serialized/deserialized over Gson 下面替换成自己的实体类
```

### 완료되었습니다!
