gson class[] 與 Json String 相互轉化通用化
阿新 • • 發佈:2018-11-27
1.目的:
主要通過gson實現class 陣列與json 轉化的通用化的工具。不會因為類不同改變工具的類。
2.原始碼
工具類:
package Util; import java.util.ArrayList; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; //是將物件轉換成字串 public class MyJson<T> { // public static void main(String[] args){ // System.out.println(); // String jsonData= "[{\"name\":\"小路\",\"age\":23}]"; // parseToString(jsonData); // } // public LinkedList<T> parseToOject(String jsonData){ // //這樣拿到的是�?��Object陣列,現在我只解析一個Products // Type listType=new TypeToken<LinkedList<T>>(){}.getType(); //TypeToken是一個空的抽象類 // Gson gson=new Gson(); // LinkedList<T> Objects=gson.fromJson(jsonData,listType); //Object物件會被儲存到LinkedList�? // return Objects; // // } /* * Products product=new Products("1","zzx","mm",999.0,"mam","hao","hhhhhhhhhhhhhhhh","phone","000","1314"); List<Products> products =new ArrayList<Products>(); products.add(product); String json=new Object2Json().parseToJson(products); System.out.println(new Json2Object<Products>().parseToOject(json, Products[].class).get(0).getPname()); */ /*1.List是一個介面,因此是沒有例項的,ArrayList是他 的一個子類,所以可以用ArrayList來構造List物件陣列 * List<Products> products =new ArrayList<Products>(); * * 2.Class<T[]> type相比上面這個泛型函式,這邊多了一個引數 Products[].class * 網上解釋是這樣的 造成這種問題的原因是:泛型在編譯期型別被擦除導致,是Products型別在這裡不能識別,所以還要講Products類名傳進來(不是物件啊)Products[].class * 但是Object2Json不需要這個引數,關鍵是這個函式Gson().fromJson(jsonData, type); * Gson第二個引數需要的是JavaBean所需要的型別名,泛型T雖然可以繼承,但是在這裡並不能識別,因此需要把型別名傳進來 */ //Products[].class public ArrayList<T> parseToObject(String jsonData, Class<T[]> type){ //這樣拿到的是一個Products陣列,現在我只解析一個Products T[] list = new Gson().fromJson(jsonData, type); ArrayList<T> array_list=new ArrayList<T>(); for(int i=0;i<list.length;i++){ array_list.add(list[i]); } return array_list; } public String parseToJson(ArrayList<Object> objects){ //Iterator iterator=Views.iterator(); Gson g=new Gson(); String ListJsonString = "["; // for(Iterator iterator = objects.iterator();iterator.hasNext();){ // // View View=(View)iterator.next(); // String jsonObject=g.toJson(objects.); // ListJsonString+=jsonObject+","; // } for(int i=0;i<objects.size();i++){ String jsonObject=g.toJson(objects.get(i)); ListJsonString+=jsonObject+","; } ListJsonString=ListJsonString.substring(0, ListJsonString.length()-1)+"]"; return ListJsonString; } }
測試類
package Test; import java.util.ArrayList; import Domain.Student; public class Test { public static void main(String[] args ){ ArrayList<Student> array_student=new ArrayList<Student>(); Student student=new Student(1,"xiaolu","123"); array_student.add(student); String jsonString=new Util.MyJson().parseToJson(array_student); System.out.println(jsonString); array_student=(ArrayList<Student>) new Util.MyJson().parseToObject(jsonString, Domain.Student[].class); System.out.println(array_student.get(0).getUsername()); } }