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的应用实例

  1. /**
  2. * 使用Gson实现对象,Json互转
  3. * @author jph
  4. * Date:2014.09.29
  5. */
  6. public class GsonUtil {
  7. public static Gson gson;
  8. /**Json转JavaBean**/
  9. public static final int JSON_JAVABEAN=0x10001;
  10. /**Json转List<T>**/
  11. public static final int JSON_LIST=0x10002;
  12. /**Json转Map<T>**/
  13. public static final int JSON_MAP=0x10004;
  14.  
  15. /**
  16. * 将对象转换成Json格式的字符串
  17. * @param object 要转换成Json的对象
  18. * @return String:Json格式的字符串
  19. */
  20. public static String convertObject2Json(Object object) {
  21. gson=new Gson();
  22. return gson.toJson(object);
  23. }
  24. /**
  25. * 将Json转换成Java对象
  26. * @param inputStream 要转换成Java对象的inputStream
  27. * @param javaBean List获取Map中所包括的javaBean
  28. * @param convertFlag 转换类型标识
  29. * @return Object:Java对象
  30. */
  31. public static Object convertJson2Object(InputStream inputStream,Class<?>javaBean ,int convertFlag) {
  32. gson=new Gson();
  33. Object object=null;
  34. // String json=inputStream2String(inputStream);
  35. BufferedReader reader=intputStream2BufferedReader(inputStream);
  36. Type type=getType(javaBean,convertFlag);
  37. object=gson.fromJson(reader,type);
  38. return object;
  39. }
  40. /**
  41. * 获取要转换成的对象类型
  42. * @param javaBean
  43. * @param convertFlag
  44. * @return
  45. */
  46. private static Type getType(Class<?
  47.  
  48. > javaBean,int convertFlag) {
  49. Type type=null;
  50. switch (convertFlag) {
  51. case JSON_LIST:
  52. if (javaBean.equals(News.class)) {//Json转List泛型
  53. type=new TypeToken<List<News>>(){}.getType();
  54. }
  55. break;
  56. case JSON_MAP:
  57. if (javaBean.equals(News.class)) {//Json转Map泛型
  58. type=new TypeToken<Map<String,News>>(){}.getType();
  59. }
  60. break;
  61. case JSON_JAVABEAN://Json转JavaBean
  62. type=javaBean;
  63. break;
  64. }
  65. return type;
  66. }
  67. /**
  68. * 将InputStream封装成BufferedReader
  69. * @param inputStream
  70. * @return
  71. */
  72. private static BufferedReader intputStream2BufferedReader(InputStream inputStream) {
  73. return new BufferedReader(new InputStreamReader(inputStream));
  74. }
  75. }

代码分析:

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

Json与Java对象互转之Gson学习的更多相关文章

  1. android开发中json与java对象相互转换

    json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...

  2. json字符串与java对象互转

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  3. JSON 与JAVA对象之间的转换(转)

    JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...

  4. Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)

    1. 在Java中获取 .properties 文件的路径 (src/main/resources 下) ProjectName |---src/main/java |---src/main/reso ...

  5. jackson 进行json与java对象转换 之三

    2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...

  6. JSON与Java对象的互相转换

    JSON与Java对象的互相转换 例一(单个对象进行赋值): @RequestMapping("test1.do") @ResponseBody public JSONObject ...

  7. Json:Java对象和Json文本转换工具类

    Json 是一个用于 Java 对象 和 Json 文本 相互转换的工具类. 安装 下载源码 git clone https://github.com/njdi/durian.git 编译源码 cd ...

  8. JSON和java对象的互转

    先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...

  9. java json字符串和对象互转

    /** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String ...

随机推荐

  1. Windows下与Linux下编写socket程序的区别 《转载》

     原文网址:http://blog.chinaunix.net/uid-2270658-id-308160.html [[Windows]] [Windows: 头文件的区别] #include< ...

  2. C++运算符重载的方法

    运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算.也就是说,运算符重载是通过定义函数实现的. 运算符重载实质上是函数的重载 重载运算符的函 ...

  3. HDU 1556 Color the Ball 线段树 题解

    本题使用线段树自然能够,由于区间的问题. 这里比較难想的就是: 1 最后更新须要查询全部叶子节点的值,故此须要使用O(nlgn)时间效率更新全部点. 2 截取区间不能有半点差错.否则答案错误. 这两点 ...

  4. vs2005及以上版本的程序分发问题

    我们使用vs2005及以上版本编译的应用程序(C/C++),在客户机器运行时,会出现: “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 那么,我们怎么解决这个问题呢 ...

  5. 与众不同 windows phone (8) - Tile(磁贴)

    原文:与众不同 windows phone (8) - Tile(磁贴) [索引页][源码下载] 与众不同 windows phone (8) - Tile(磁贴) 作者:webabcd介绍与众不同 ...

  6. KL25开发板利用串口蓝牙与PC通信

    KL25开发板芯片本身支持三个串口,uart0,uart1,uart2.其中uart0不太一样,在数据手册里面单独一章介绍:而uart1和uart2则是一样的. 我所使用的串口蓝牙模块是BC04,支持 ...

  7. 在ListView中实现排序

    此处介绍的情境是: (1)使用table布局ListView. (2)ListView的数据源是List<T>. (3)排序字段2个(帖子的回复次数和浏览次数),都是int类型. 基本思路 ...

  8. JSP的include指令

    JSP的include 指令:向当前页面中插入的一个静态文件的内容. 在test5.jsp里面 <%@ include file="test5_1.jsp" %> 新建 ...

  9. linux教程之一

    相信不少想学习linux的新手们正愁不知道看什么linux学习教程好,下面小编给大家收集和整理了几点比较重要的教程,供大家学习,如需想学习更多的话,可到wdlinux学堂寻找更多教程. 1. 忘记my ...

  10. Android 手势&amp;触摸事件 MotionEvent

    1.http://blog.csdn.net/omg_2012/article/details/7881443 这篇相当好啊 2.http://blog.csdn.net/android_tutor/ ...