Java技術交流群:817997079,歡迎“有志之士”的加入。
阿裡雲伺服器優惠連結:https://www.aliyun.com/minisite/goods?userCode=epd6ezxj
目前資料互動中最常用的資料互動格式莫過于json了,那麼在java開發中經常會遇到json的序列化與反序列化,常用的json序列化工具有阿裡的Fastjson、spring mvc内置的Jackson、還有就是我們接下來要說的谷歌的Gson。
GSON是Google提供的用來在Java對象和JSON資料之間進行映射的Java類庫。可以将一個Json字元轉成一個Java對象,或者将一個Java轉化為Json字元串。
Gson特點:1:面向對象;2:簡潔高效;3:資料傳遞和解析友善
下面介紹一下Gson的常用方法
首先貼一下我用來做示例的實體類Test的代碼,如下:
public class Test {
/* 姓名*/
private String name;
/* 性别*/
private String sex;
/* 年齡*/
private Integer 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 Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "StudentEntity{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
public Test(String name, String sex, Integer age) {
this.name = name;
this.sex = sex;
this.age = age;
}
1.gson.tojso();//形參為要序列化的json串
方法作用:把實體對象轉換為json(序列化)
public static void main(String[] args) {
//建立實體類
Test test = new Test("序列化", "男", 25);
//執行個體化Gson
Gson gson = new Gson();
//把對象序列化為json
String s = gson.toJson(test);
//輸出---序列化後的結果為:{"name":"序列化","sex":"男","age":25}
System.out.println("序列化後的結果為:"+s);
//定義List集合
List<Test> tests = new ArrayList<>();
tests.add(test);
String s1 = gson.toJson(tests);
//輸出---List集合序列化後的結果為:[{"name":"序列化","sex":"男","age":25}]
System.out.println("List集合序列化後的結果為:"+s1);
Map<String, Test> testMap = new HashMap<>();
testMap.put("序列化測試",test);
//輸出--Map集合序列化後的結果為:{序列化測試=StudentEntity{name='序列化', sex='男', age=25}}
System.out.println("Map集合序列化後的結果為:"+testMap);
}
2.gson.fromJson();
方法作用:
(1)把json轉換為List對象(反序列化)
public static void main(String[] args) {
// 定義json
String json = "[{\"name\":\"轉換對象\",\"sex\":\"女\",\"age\":20}]";
//執行個體化Gson
Gson gson = new Gson();
//把json序列化為List對象
List<Test> o = gson.fromJson(json, new TypeToken<List<Test>>() {
}.getType());
//輸出---序列化後的結果為:[StudentEntity{name='轉換對象', sex='女', age=20}]
System.out.println("反序列化成List後的結果為:"+o.toString());
}
(2)把json轉換為Map對象(反序列化)
public static void main(String[] args) {
//執行個體化Gson
Gson gson = new Gson();
//定義json
String jsonMap = "{'序列化測試':{name='序列化', sex='男', age=25}}";
//把json序列化為Map對象
HashMap<String,Test> o1 = gson.fromJson(jsonMap, new TypeToken<HashMap<String,Test>>() {
}.getType());
//輸出---{序列化測試=StudentEntity{name='序列化', sex='男', age=25}}
System.out.println("反序列化成Map後的結果為:"+o1);
}
(3)把json轉換為實體對象(反序列化)
public static void main(String[] args) {
// 定義json
String json = "{\"name\":\"轉換對象\",\"sex\":\"女\",\"age\":20}";
//執行個體化Gson
Gson gson = new Gson();
//把json序列化為實體類(Test)對象
Test test = gson.fromJson(json, Test.class);
//輸出---反序列化後的結果為:StudentEntity{name='轉換對象', sex='女', age=20}
System.out.println("反序列化成實體類後的結果為:"+test.toString());
}
劃重點--------------------------------------------------------------------------------------
一、把實體類序列化為json時,如果實體類某個屬性的值為null,gson在序列化該對象是則預設過濾掉該屬性,該屬性不會參與序列化。
二、反序列化時需注意json串的格式,如果是數組則最外層是用‘[ ]’來包括的,如果是對象或者是Map則是用‘{ }’來包括的,根據需要反序列化的json格式來標明需要反序列化用的方法gson.fromJson()應該傳遞哪種參數,反序列化成對象參數應該是這個對象的反射(entity.Class),如果是List或者是Map,參數則是泛型。
分享到這裡就結束了,歡迎技術黨一起交流技術心得。
---------------------------------------------純屬原創,不喜勿噴。