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的应用主要为toJson与fromJson两个转换方法。而在使用这样的对象转换之前需先创建好对象的类以及其成员才干成功的将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提供的数据类型转换器,能够支持各种数据集合类型转换。)。
Json与Java对象互转之Gson学习的更多相关文章
- android开发中json与java对象相互转换
json与java对象的相互转换.(使用com.google.gson) 在Android开发过程中,客户端总是需要从服务器获取数据,包括XML和json格式,目前json格式的数据使用较为普遍,所以 ...
- json字符串与java对象互转
在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...
- JSON 与JAVA对象之间的转换(转)
JSON与XML两者目前在数据交互方面都有很高的使用率,随着现在SOA的兴起,异构系统的整合地位相应提高,本篇文章主要介绍JSON与JAVA对象之间的相互转换. 一.对普通类型的JSON模式的转换 一 ...
- Spring: 读取 .properties 文件地址,json转java对象,el使用java类方法相关 (十三)
1. 在Java中获取 .properties 文件的路径 (src/main/resources 下) ProjectName |---src/main/java |---src/main/reso ...
- jackson 进行json与java对象转换 之三
2.测试类,没用Junit,用Main()方法输出. package test; import java.io.IOException; import java.util.ArrayList; imp ...
- JSON与Java对象的互相转换
JSON与Java对象的互相转换 例一(单个对象进行赋值): @RequestMapping("test1.do") @ResponseBody public JSONObject ...
- Json:Java对象和Json文本转换工具类
Json 是一个用于 Java 对象 和 Json 文本 相互转换的工具类. 安装 下载源码 git clone https://github.com/njdi/durian.git 编译源码 cd ...
- JSON和java对象的互转
先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了. ...
- java json字符串和对象互转
/** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String ...
随机推荐
- 有空研究一下OwnerDraw和三种Windows风格CS_OWNDC和CS_PARENTDC和CS_CLASSDC
就在StdCtrls.pas, ExtCtrls.pas和Buttons.pas三个类里研究就够了,这是初步的搜索结果: ---------- 在打开的文档中查找 ---------- "G ...
- spring mvc ModelAndView向前台传值
今天在做项目的时候遇到一个问题,把第一个页面保存的id传到第三个页面中去用,原来是在controller层加了一个全局变量控制的,但是后来发现这个变量实现不了我要的功能,于是查了一下,原来ModelA ...
- Transformations 方块转换
题目是中文题,就不做什么解释了,纯模拟题,主要要搞清楚这几种装换方式下标的变化: 第一种:顺时针旋转90度: c[j][n-i+1]=a[i][j]; 第二种:旋转180度: c[n-i+1][n-j ...
- 阿斯钢iojeg9uhw8uhy平
http://www.huihui.cn/share/8424421 http://www.huihui.cn/share/8424375 http://www.huihui.cn/share/842 ...
- OPPO通过AWS节约大量成本提供海外服务
关于OPPO OPPO最早被人熟知是在以MP3和MP4为代表的影音市场.转型进入手机市场后,OPPO获得了更大发展机遇,近几年更是成为发展速度最快的国产品牌之中的一个.早在2010年前就開始了海外市场 ...
- Swift - 触摸事件(点击,移动,抬起等)说明及用例
在iOS开发中,UIGestureRecognizer可以方便的响应处理手势事件. 而如果要想更精细的处理,我们还需要借助touchesBegan,touchesMoved,touchesEnded等 ...
- badi增强
对于根据事务代码查找对应的BADI,网上介绍的方法很多,但总结下来无非就两种方法,在此把它记录下来,方便以后自己查阅了. (1)通过SE24,输入CL_EXITHANDLER,然后在方法GET_INS ...
- 【Demo 0010】事件响应链
本章学习要点: 1. 熟悉iOS事件分发过程以及事件响应链; 2. 掌握基本事件响应方法(单击,双击): 3. 掌握基本手势处理方法:
- VMWARE安装MAC时无法移动鼠标?
1.先不要怀疑你的软件 2.查看你的硬件设置 3.什么?你把USB去除了? 4.给我加回来!!! 5.OK!鼠标可以移动了!
- 更改windows系统语言,改为英文