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转换成对象的时候,上面代码是从server端获取输入流。然后将输入流封装成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提供的数据类型转换器,能够支持各种数据集合类型转换。)。

原文地址:https://www.cnblogs.com/mfrbuaa/p/5066117.html