package com.amway.common.util;
import java.lang.reflect.Type;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import com.amway.common.data.BeanList;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
public class JsonFunc {
public static final String formateDate = "yyyy/MM/dd HH:mm:ss";
public static String toJson(Object src){
Gson gson = new Gson();
return gson.toJson(src);
}
public static String toJonByException(Object src) {
GsonBuilder gsonBuilder = new GsonBuilder();
//添加异常处理
gsonBuilder.registerTypeAdapter(Exception.class, new ExceptionSerializer());
//添加日期时间处理
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
Gson gson = gsonBuilder.create();
return gson.toJson(src);
}
public static <T> T fromJson(String json, Class<T> classOfT){
Gson gson = new Gson();
return gson.fromJson(json, classOfT);
}
public static <T> T fromJson(String json, Type typeOfT){
Gson gson = new Gson();
return (T)gson.fromJson(json, typeOfT);
}
public static <T> T fromJson(String json, Type typeOfT,String formateDate){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
Gson gson = gsonBuilder.create();
return (T)gson.fromJson(json, typeOfT);
}
public static String toJson(Object src,String formateDate){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
Gson gson = gsonBuilder.create();
return gson.toJson(src);
}
public static String toJsonByMobile(Object src,String formateDate){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapterFactory(new ClassTypeAdapterFactory());
gsonBuilder.registerTypeAdapter(Class.class, new ClassTypeAdapter());
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
Gson gson = gsonBuilder.create();
return gson.toJson(src);
}
public static String toJsonForListType(Object src) {
return toJsonForListType(src,null);
}
public static <T> List<T> jsonToList(String json, Class<T[]> clazz) {
Gson gson = new Gson();
T[] array = gson.fromJson(json, clazz);
return Arrays.asList(array);
}
public static String toJsonForListType(Object src,String formateDate) {
Gson gson = null;
if (formateDate==null){
gson = new Gson();
}else{
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
gson = gsonBuilder.create();
}
List dataResultList = new ArrayList();
Collection colResult = (Collection) src;
for(Object obj : colResult) {
String objStr = gson.toJson(obj);
dataResultList.add(objStr);
}
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<ArrayList<String>>() {
}.getType();
return gson.toJson(dataResultList,type);
}
public static List fromJsonForListType(String json, Object classOfT){
return fromJsonForListType(null,ArrayList.class,json,classOfT);
}
public static List fromJsonForListType(String json, Object classOfT, String formateDate){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
Gson gson = gsonBuilder.create();
return fromJsonForListType(gson,ArrayList.class,json,classOfT);
}
public static BeanList fromJsonForBeanListType(String json, Object classOfT){
return (BeanList)fromJsonForListType(null,BeanList.class,json,classOfT);
}
public static BeanList fromJsonForBeanListType(String json, Object classOfT, String formateDate){
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setDateFormat(formateDate);
gsonBuilder.registerTypeAdapter(Timestamp.class,new TimestampTypeAdapter(formateDate));
Gson gson = gsonBuilder.create();
return (BeanList)fromJsonForListType(gson,BeanList.class,json,classOfT);
}
private static List fromJsonForListType (Gson gson, Class returnListClass ,String json, Object classOfT){
List returnList = null;
// 判断返回类型,不是 List类型的返回null
if(returnListClass.getSimpleName().indexOf(List.class.getSimpleName())<0){
return returnList;
}
try{
returnList = (List)Class.forName(returnListClass.getName()).newInstance();
}catch(Exception e){
System.err.println("JsonFunc Class.forName error: "+returnListClass);
}
// 判断解析返回对象classOfT,不是Class/Type类型,直接返回null
boolean isClass = true; // classOfT传入参数是否为Class
Type classOfTtype = null;
Class classOfTclass = null;
if (classOfT instanceof Class){
classOfTclass = (Class)classOfT;
}else if (classOfT instanceof Type){
isClass = false;
classOfTtype = (Type)classOfT;
}else {
System.err.println("JsonFunc classOfT error: "+classOfT);
return returnList;
}
// 判断gson是否为空
if (gson==null){
gson = new Gson();
}
java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<ArrayList<String>>() {
}.getType();
List<?> listTypeJson = JsonFunc.fromJson(json, type);
for(Object obj : listTypeJson) {
if (isClass){
returnList.add(gson.fromJson(obj.toString(), classOfTclass));
}else{
returnList.add(gson.fromJson(obj.toString(), classOfTtype));
}
}
return returnList;
}
public static <T> List<T> jsonStringConvertToList(String string, Class<T[]> cls) {
Gson gson = new Gson();
T[] array = gson.fromJson(string, cls);
return Arrays.asList(array);
}
}