版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28711703/article/details/79080319
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());
}
}