添加依賴 Gradle:
dependencies { implementation 'com.google.code.gson:gson:2.8.6' }
Gson的實例化有兩種方式:
1.簡單實例化
Gson gson=newGson();
2.在實例化時進行多種配置(由GsonBuilder 實現):
Gson gson = new GsonBuilder()
.setLenient()// json寬鬆
.enableComplexMapKeySerialization()//支持Map的key爲複雜對象的形式
.serializeNulls() //智能null
.setPrettyPrinting()// 調教格式
.disableHtmlEscaping() //默認是GSON把HTML 轉義的
.create();
Gson的基本用法:
toJson()實現了序列化,fromJson()實現反序列化。
toJson():
1.JavaBean轉換Json字符串
public class ResultBean implements Serializable {
private int code;
private String message;
private boolean isOK;
public ResultBean() {
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public boolean isOK() {
return isOK;
}
public void setOK(boolean OK) {
isOK = OK;
}
}
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
ResultBean result1 = new ResultBean();
result1.setCode(007);
result1.setMessage("詹姆斯邦德");
result1.setOK(true);
String string1 = gson.toJson(result1);
System.out.println(string1);
ResultBean result2 = new ResultBean();
result2.setCode(007);
result2.setMessage(null);
result2.setOK(true);
String string2 = gson.toJson(result2);
System.out.println(string2);
GsonBuilder gsonBuilder = new GsonBuilder().serializeNulls();
ResultBean result3 = new ResultBean();
result3.setCode(007);
result3.setMessage(null);
result3.setOK(true);
String string3 = gsonBuilder.create().toJson(result2);
System.out.println(string3);
}
}
運行結果:
{"code":7,"message":"詹姆斯邦德","isOK":true}
{"code":7,"isOK":true}
{"code":7,"message":null,"isOK":true}
注意:如果ResultBean參數中有變量爲null,那麼 toJson() 輸出的結果則會把爲null值的字段忽略,要避免這種結果,可以給Gson設置 serializeNulls();
2.List Map轉Json字符串
public class Test {
public static void main(String[] args) {
Gson gson = new Gson();
List<String> list = Arrays.asList("劉大", "王二", "張三", "趙四");
System.out.println(gson.toJson(list));
Map<String, Object> content = new HashMap<>();
content.put("name", "張三");
content.put("age", "26");
System.out.println(gson.toJson(content));
}
}
運行結果:
["劉大","王二","張三","趙四"]
{"name":"張三","age":"26"}
fromJson():
1.Json字符串轉JavaBean
public class Test {
public static void main(String[] args) {
String s = "{\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"詹姆斯邦德\",\n" +
"\t\"isOK\": true\n" +
"}";
Gson gson = new Gson();
ResultBean resultBean = gson.fromJson(s, ResultBean.class);
System.out.println(resultBean);
}
}
運行結果:
ResultBean{code=7, message='詹姆斯邦德', isOK=true}
2. Json字符串轉List
public class Test {
public static void main(String[] args) {
String s = "[{\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"詹姆斯邦德\",\n" +
"\t\"isOK\": true\n" +
"}, {\n" +
"\t\"code\": \"007\",\n" +
"\t\"message\": \"凌凌漆\",\n" +
"\t\"isOK\": true\n" +
"}]";
Gson gson = new Gson();
List<ResultBean> resultBeanList = gson.fromJson(s, new TypeToken<List<ResultBean>>() {
}.getType());
System.out.println(resultBeanList);
}
}
運行結果:
[ResultBean{code=7, message='詹姆斯邦德', isOK=true}, ResultBean{code=7, message='凌凌漆', isOK=true}]
Gson註解
屬性重命名 @SerializedName 註解的使用
作用:轉換關鍵字key,json轉換成JavaBean時,json字段的key 默認必須和我們聲明類的字段名稱一樣,當服務器端返回了關鍵字怎麼辦,比如key 爲new switch這樣,我們 在聲明類的時候不能寫這樣的字段,可能你想服務器端改動,他可能要改數據庫,但是我告訴你,做服務端的大部分不願意改動他的json,是很自私的!這時候重命名註解都排上用場了 第二種場景:服務器端返回的json 的key 簡直太醜,或者太長,你想簡化,my_parent_name,可以簡化成mpn 比較優雅簡介
在屬性名上註解 @SerializedName,使POJO中的屬性名轉爲json的鍵名
SerializedName註解還有一個屬性alternate,接收一個String數組
eg:@SerializedName(value = "data", alternate = {"Date", "date"})
注意:當json中的鍵名出現data Date date任意一個時均可以得到正確的結果。
參考:https://blog.csdn.net/axuanqq/article/details/51441590