gson 的基本用法
Gson的基本用法:
1、toJson 將object轉化為json字串
將此實體類轉化為json字串
class Persion{
public Persion(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
private int age;
}
demo:
Gson gson = new Gson(); String json = gson.toJson(new Persion("lucy",10));
結果:
{“age”:10,”name”:”lucy”}
Gson gson = new Gson();
List<Persion> list = new ArrayList<>();
for(int i=0;i<5;i++){
list.add(new Persion("lucy"+i,i));
}
String json = gson.toJson(list);
結果:
[{“age”:0,”name”:”lucy0”},{“age”:1,”name”:”lucy1”},{“age”:2,”name”:”lucy2”},{“age”:3,”name”:”lucy3”},{“age”:4,”name”:”lucy4”}]
Map<String,Object> map = new HashMap<>();
map.put("name","lucy");
map.put("age",10);
String json = gson.toJson(list);
結果:
{“age”:10,”name”:”lucy”}
這裡列舉了3中情況的轉化(bean、List、Map),將json序列化為JavaBean其實就是上面反過來。
String json = "{\"age\":10,\"name\":\"lucy\"}"; Persion persion = gson.fromJson(json,Persion.class);
結果:
返回一個Person物件並賦值
String json = "{\"Age\":10,\"name\":\"lucy\"}";
Persion persion = gson.fromJson(json,Persion.class);
注意和上面的區別,我們將age變為Age
結果:
仍然返回一個person物件,不過age的值為0,name為lucy,
說明gson是區分大小寫的
由於後臺和我們前臺的命名規範可能不同,而且你讓後臺去改json串,人家也不一定改,我們定義bean的時候也不能按照json來定義,我們也要遵守我們的命名規範,這個時候註解就登場了。
1、重新命名註解:SerializedName
這個註解就是解決json的key和bean中名稱不一致。
class Persion{
public Persion(String name, int age) {
this.name = name;
this.age = age;
}
private String name;
@SerializedName("Age")
private int age;
}
我們在age屬性上面加上@SerializedName(“Age”),這個時候在執行上面的程式碼就能正常返回了。
我們再來看看SerializedName的另一種用法:
@SerializedName(value = “name”,alternate = {“name1”,”name2”})
private String name;
這種用法是把json串key為name,name1,name2的值都賦值給name,注意後面的值會把前面的覆蓋掉,這個是根據json串的順序來的
、根據json串的順序來的
、根據json串的順序來的
,重要的事情說3遍。比如:
String json = "{\"Age\":10,\"name1\":\"lucy1\",\"name2\":\"lucy2\",\"name\":\"lucy\"}";
name的值為:lucy
比如:
String json = "{\"Age\":10,\"name1\":\"lucy1\",\"name\":\"lucy\",\"name2\":\"lucy2\"}";
name的值為:lucy2
到這裡gson已經能夠解決95%的問題了,當然gson還提供了一些高階方法:
@Expose :指定(反)序列化哪些欄位。
@Since(float v)、@Util(float v): 版本控制,不同的版本,我們api介面可能會發生變化,可以用這個欄位來指定哪些可以(反)序列化
基本的就瞭解到這吧,其實還有一些高階用法比如TypeAdapter ,比如age想要一個int值,json返回的是String值,如何做容錯處理?以後用到在研究吧。