首页 > 代码库 > Json与Java对象互转之Gson学习

Json与Java对象互转之Gson学习

JsonJava对象互转之Gson学习


请尊重他人的劳动成果,转载请注明出处:Json与Java对象互转之Gson学习 


        我曾在《XML,Object,Json转换之浅析Xstream的使用》一文中介绍过使用XStream进行XML,Object,Json之间的转换,虽然XStream内置了对Json的支持,但是效果不是特别好,毕竟XStream重点不在Json。下面就介绍另外一种工具。

 

        Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。


1.如何使用Gson?

         首先从http://code.google.com/p/google-gson/downloads/list上下载Gson的jar包,然后将其导入到项目中。然后,就可以在你的项目中使用Gson了。


2.主要方法

        Gson的应用主要为toJsonfromJson两个转换方法,而在使用这种对象转换之前需先创建好对象的类以及其成员才能成功的将JSON字符串成功转换成相对应的对象。


3. Gson的应用实例

/**
 * 使用Gson实现对象,Json互转
 * @author jph
 * Date:2014.09.29
 */
public class GsonUtil {
    public static Gson gson;
    /**Json转JavaBean**/
    public static final int JSON_JAVABEAN=0x10001;
    /**Json转List<T>**/
    public static final int JSON_LIST=0x10002;
    /**Json转Map<T>**/
    public static final int JSON_MAP=0x10004;
   
    /**
     * 将对象转换成Json格式的字符串
     * @param object 要转换成Json的对象
     * @return String:Json格式的字符串
     */
    public static String convertObject2Json(Object object) {     
        gson=new Gson();           
        return gson.toJson(object);
    }  
    /**
     * 将Json转换成Java对象
     * @param inputStream 要转换成Java对象的inputStream
     * @param javaBean List获取Map中所包含的javaBean
     * @param convertFlag 转换类型标识
     * @return Object:Java对象
     */
    public static Object convertJson2Object(InputStream inputStream,Class<?>javaBean ,int convertFlag) {       
        gson=new Gson();   
        Object object=null;
//      String json=inputStream2String(inputStream);
        BufferedReader reader=intputStream2BufferedReader(inputStream);    
        Type type=getType(javaBean,convertFlag);   
        object=gson.fromJson(reader,type);         
        return object;
    }
    /**
     * 获取要转换成的对象类型
     * @param javaBean
     * @param convertFlag
     * @return
     */
    private static Type getType(Class<?> javaBean,int convertFlag) {     
        Type type=null;
        switch (convertFlag) {
        case JSON_LIST:
            if (javaBean.equals(News.class)) {//Json转List泛型
                type=new TypeToken<List<News>>(){}.getType();
            }
            break;
        case JSON_MAP:
            if (javaBean.equals(News.class)) {//Json转Map泛型
                type=new TypeToken<Map<String,News>>(){}.getType();
            }
            break;        
        case JSON_JAVABEAN://Json转JavaBean
            type=javaBean;
            break;        
        }      
        return type;  
    }
    /**
     * 将InputStream封装成BufferedReader
     * @param inputStream
     * @return
     */
    private static BufferedReader intputStream2BufferedReader(InputStream inputStream) {     
        return new BufferedReader(new InputStreamReader(inputStream));   
    }
}


代码分析:

         在将Json转换成对象的时候,上面代码是从服务器端获取输入流,然后将输入流封装成BufferedReader对象,然后通过fromJson()方法将Json转换成Java对象。

        Gson的fromJson()方法的第一个参数支持String、JsonElement和Reader类型的参数,可以根据需要进行选择。fromJson()方法的第二个参数支持Type和Class<?>类型的参数,当将Json转成JavaBean时可以使用Class<?>参数,也就是用对应JavaBean的JavaBean.calss作为第二个参数。当需要将Json转出成List泛型,Map泛型的时候需要采用TypeToken将第二个参数转换成Type类型(TypeToken是gson提供的数据类型转换器,可以支持各种数据集合类型转换。)。

Json与Java对象互转之Gson学习