一、概述
本節給出一個封裝好的使用Gson實現對象、List集合的序列化與反序列化的工具類。
1.Book.java類是一個javaben,里面定義了書本id和書本名稱
2.JsonUtil.java是工具類
3.Test.java是測試類
二、具體實例
1.Book.java
package com.yw.gsonlib;
import com.google.gson.annotations.SerializedName;
/**
* create by yangwei
* on 2020-02-21 18:08
*/
public class Book {
public Book(){}
private String id;
/**
* 加上@SerializedName注解后服務端api返回name、bookName、Name、bn時,客戶端都能夠拿到正確的值給name屬性。
*/
@SerializedName(value = "bookName",alternate = {"Name","bn"})
private String name;
public Book(String id, String name) {
this.id = id;
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
2.JsonUtil.java工具類:使用此對象您可以把任意的可用對象轉換為json字符串,也可以把json字符串轉換為具體的對象或者List集合對象
package com.yw.gsonlib;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import java.util.ArrayList;
import java.util.List;
/**
* 泛型解析工具類
* create by yangwei
* on 2020-02-23 15:47
*/
public class JsonUtil {
/**
* 將json字符串轉換為ArrayList
*
* @param jsonArray
* @param clazz
* @param <T>
* @return
*/
public static <T> List<T> fromJsonToList(String jsonArray, Class<T> clazz) {
List<T> list = new ArrayList<>();
Gson gson = new Gson();
JsonArray array = new JsonParser().parse(jsonArray).getAsJsonArray();
for (JsonElement obj : array) {
list.add(gson.fromJson(obj, clazz));
}
return list;
}
/**
* 將字符串轉換為Object對象
*
* @param jsonObj
* @param clazz
* @param <T>
* @return
*/
public static <T> T fromJsonToObject(String jsonObj, Class<T> clazz) {
Gson gson = new Gson();
return gson.fromJson(jsonObj, clazz);
}
/**
* 將Object對象轉換成為Json字符串
*
* @param obj
* @param <T>
* @return
*/
public static <T> String objectToJson(T obj) {
Gson gson = new Gson();
return gson.toJson(obj);
}
}
3.Test.java,使用main方法進行測試
package com.yw.gsonlib;
import java.sql.SQLSyntaxErrorException;
import java.util.ArrayList;
import java.util.List;
/**
* 測試json操作object的序列化和反序列化
* create by yangwei
* on 2020-02-23 19:03
*/
public class Test {
public static void main(String[] args) {
//准備數據
List<Book> books = new ArrayList<>();
books.add(new Book("1","《深入Java虛擬機》"));
books.add(new Book("2","《大話數據結構》"));
//准備一個jsonarray字符串,ps:將泛型集合轉換為json字符串
String json = JsonUtil.objectToJson(books);
System.out.println("輸出泛型集合字符串:"+json);
//將字符串轉換為泛型的List<Book>集合
List<Book> bks = JsonUtil.fromJsonToList(json,Book.class);
System.out.println("booklist_begin");
for(Book b :bks){
System.out.println(b.getName());
}
System.out.println("booklist_end");
//將一個對象轉換為字符串
Book bk = new Book("1","《深入Android源代碼》");
String bkStr = JsonUtil.objectToJson(bk);
System.out.println("book:"+bkStr);
//講一個json字符串轉換為對象
Book bks1 = JsonUtil.fromJsonToObject(bkStr,Book.class);
System.out.println("打印book書名:"+bks1.getName());
}
}
4.具體的輸出截圖

