转JSON 工具类二

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

}

猜你喜欢

转载自blog.51cto.com/7218743/2459987