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 ...
随机推荐
- JSP自定义标签——简单标签(2)
在前一篇博客中,我们已经学习了自定义的简单标签的基本使用方法,这一篇我们来学习如何在简单标签中添加标签属性.对自定义标签添加一些属性,可以使我们的标签功能更加灵活和复用.例如前一篇博客使用简单标签来对 ...
- (WinForm)文件夹状态监控,最小化到托盘,开机自启动
原文 (WinForm)文件夹状态监控,最小化到托盘,开机自启动 . 文件夾監控(監測文件夾中的文件動態): //MSDN上的例子 public class Watcher { public stat ...
- 百度地图js版定位控件
一 概述 百度地图在最新版已加入浏览器定位控件,个人认为应该是既高德地图更新了一个浏览器也能定位功能后,百度不甘落后自己简简单单,草草写了个这个功能的定位控件 GeolocationControl 这 ...
- expect实现ssh自动登录
expect实现ssh自动登录 #!/usr/local/bin/expect set PASSWD [lindex $argv 1] set IP [lindex $argv 0] set CM ...
- C++著名类库和C++标准库介绍
C++著名类库 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost 3.C++各大有名库的介绍——GUI 4.C++各大有名库的介绍——网络通信 5.C++各 ...
- minidump详细介绍
Effective minidump 简介 在过去几年里,崩溃转储(crash dump)成为了调试工作的一个重要部分.如果软件在客户现场或者测试实验室发生故障,最有价值的解决方式是能够创建一个故障瞬 ...
- Python3.2官方文档翻译--实例对象和方法对象
6.3.3 实例对象 如今我们用实例对象做什么呢?实例对象唯一可用的操作就是属性引用.如今有两种合法的属性名称:数据属性和方法. 数据属性相当于smallTalk中的实例变量,C++中的数据成员.数据 ...
- 当Scheduler拿不到url的 时候,不能立即退出
在webmagic的多线程抓取中有一个比较麻烦的问题:当Scheduler拿不到url的 时候,不能立即退出,需要等到没抓完的线程都运行完毕,没有新url产生时,才能退出.之前使用Thread.sle ...
- 获取CentOS软件源中的updates包
之前在本地网络中建了一个CentOS软件源,挺好用的,可是发现有些软件还是装不上,因为系统安装盘中的包并不全,有些软件的依赖在updates源中,updates源在网上,怎么把其中的包拿到呢?一种方法 ...
- RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理
功能: 实现登录账户的强制登录, 用If 判断当前账户是否可用.若可用,则跳出if体直接登录,若不可用,则进入If体点击 “强制登录” 按钮. 问题:如果不可用,则if 条件中的对象不可见,这样程序会 ...