返回介绍

Json 与 Java 对象互转之 Gson 学习

发布于 2025-02-26 12:59:34 字数 3468 浏览 0 评论 0 收藏 0

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文