Gson 為 Google 所有,可將 JSON 內容和 java object 互相轉換的開源函式庫。
最大的用途就是可直接將 Server 回傳的 json string 直接轉換成 java object,而不用再一一寫對應的 JsonObject。
而 GsonFormat 為 android studio 的外掛,用途是取得 json 內容之後,可以產生對應的 java object。
兩者搭配起來就可以方便的處理 Server 回傳訊息。
首先是 Gson 的部分:
這裡為Gson github連結,相關的安裝和使用都有介紹。

1.Gson Dependency

在 module 的 build.gradle 加入

dependencies {
...
  implementation 'com.google.code.gson:gson:2.8.5'
}

2.Using in code

2-1. Basic class
首先假設有個 User 類別為對應的 java object

public class User {
  private String name;
  private int age;
  private String sex;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
}

2-2. java object to json string
(就是將已存在的java物件轉成json 格式的string)

  @Test
  public void test_UserToJSON() {
    User foxx = new User();
    foxx.setAge(99);
    foxx.setName("Foxx");
    foxx.setSex("male");
    Gson gson = new Gson();
    String result = gson.toJson(foxx, User.class);
    System.out.println("userToJSON:" + result);
    assertEquals("{\"name\":\"Foxx\",\"age\":99,\"sex\":\"male\"}", result);
  }

第9行即透過 gsong.toJson 將 java object 轉成 json string
2-3. json string to java object

  @Test
  public void test_JSONToUser() {
    Gson gson = new Gson();
    String source = "{\"name\":\"Foxx\",\"age\":99,\"sex\":\"male\"}";
    User target = gson.fromJson(source, User.class);
    assertNotNull(target);
  }

第5行透過 gson.fromJson 將 json string 轉成 java object
2-4. json string to list java object

Gson gson = new Gson();
List<RecordInfo> recordInfos = gson.fromJson(httpResult, new TypeToken<List<RecordInfo>>() {}.getType());

透過 TypeToken 把 Json 格式的 String 轉換為 List。
httpResult 即為 Json 格式的 String 內容如下

[
  {
    "type": "POWER"
    "location": "L1",
    "no": "1"
  },
  {
    "type": "POWER",
    "location": "L2",
    "no": "2"
  },
  {
    "type": "POWER",
    "location": "L3",
    "serno": "3"
  }
]

RecordInfo為對應的資料格式如下

public class RecordInfo {
  private String type;
  private String location;
  private String no;
  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }
  public String getLocation() {
    return location;
  }
  public void setLocation(String location) {
    this.location = location;
  }
  public String getNo() {
    return no;
  }
  public void setNo(String no) {
    this.no = no;
  }
}

 
接著是GsonFormat

1.Install GsonFormat

安裝方式和一般的 android studio 外掛相同。
開啟 android studio -> File -> Settings -> Plugins -> Browse repositories
->輸入 gsonformat -> install -> 安裝完成後 重開 android studio

2.How to use

2-1.首先手動建立對應的空 class (只有類別名稱無其他內容),以上面的 User 為例,我們就先建立一個User的空class。

public class User {
}

2-2.產生對應 json 的內容
假設已取得 Server 回傳的 json string 如下

{
    "name":"Foxx",
    "sex":"male",
    "age":"99"
}

回到 2-1 建立的 User class,點擊上方工具欄的 Code,再點擊 Generate,選擇GsonFormat,在顯示的視窗中貼上 2-2 的內容。

點擊 OK -> 再點擊 OK,完成後 User class 如下

public class User {
  private String name;
  private String sex;
  private String age;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String getSex() {
    return sex;
  }
  public void setSex(String sex) {
    this.sex = sex;
  }
  public String getAge() {
    return age;
  }
  public void setAge(String age) {
    this.age = age;
  }
}

從第3~29行即是 GsonFormat 產生的內容。