Java的JSON格式转换库GSON的初步使用笔记

所属分类: 软件编程 / java 阅读数: 64
收藏 0 赞 0 分享

现在已经有一些能将Java对象转换成JSON的开源项目了。但是大多数项目都要求你在类文件中加入Java注解,而当你无法改动源代码的时候这是无法做到的。并且它们也不支持Java泛型。但是Gson却将这两点作为自己非常重要的设计目标。

特点:

  • 使用toJson()和fromJson()方法,就可以非常容易的完成Java对象到JSON的相互转换。
  • 能将预先存在的无法修改的对象与JSON互相转换。
  • 支持Java泛型的使用。
  • 允许对象的个性化表达形式(representation)。
  • 支持各种复杂(拥有深继承层次结构和大量使用泛型类型)的对象。

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

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提供的数据类型转换器,可以支持各种数据集合类型转换)。

更多精彩内容其他人还在看

Java基于反射机制实现全部注解获取的方法示例

这篇文章主要介绍了Java基于反射机制实现全部注解获取的方法,结合实例形式分析了java反射机制获取注解的具体实现方法与操作注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java 信号量Semaphore的实现

这篇文章主要介绍了Java 信号量Semaphore的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

eclipse+maven+spring mvc项目基本搭建过程

这篇文章主要介绍了eclipse+maven+spring mvc项目基本搭建过程,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Spring boot集成swagger2生成接口文档的全过程

这篇文章主要给大家介绍了关于Spring boot集成swagger2生成接口文档的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享

Java冒泡排序法和选择排序法的实现

这篇文章主要介绍了Java冒泡排序法和选择排序法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Cloud Alibaba教程之Sentinel的使用

这篇文章主要介绍了Spring Cloud Alibaba教程之Sentinel的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Josephus环的四种解法(约瑟夫环)基于java详解

这篇文章主要介绍了Josephus环的四种解法(约瑟夫环)基于java详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Java继承Thread类创建线程类示例

这篇文章主要介绍了Java继承Thread类创建线程类,结合实例形式分析了java线程操作相关使用技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

Java使用Callable和Future创建线程操作示例

这篇文章主要介绍了Java使用Callable和Future创建线程操作,结合实例形式分析了java使用Callable接口和Future类创建线程的相关操作技巧与注意事项,需要的朋友可以参考下
收藏 0 赞 0 分享

springBoot使用JdbcTemplate代码实例

这篇文章主要介绍了springBoot使用JdbcTemplate代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多