1. 程式人生 > >gson class[] 與 Json String 相互轉化通用化

gson class[] 與 Json String 相互轉化通用化

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());
		
	}
	
	

}