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 ...
随机推荐
- 美国企业人事喜欢考的3道.Net经典笔试题
1..求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m 答: int Num = this.TextBox1.Text.ToString() ; int Sum = 0 ; ...
- 一些关于Console的API函数
SetConsoleCtrlHandlerGenerateConsoleCtrlEventSetConsoleMode ReadConsole WriteConsole SetConsoleCP Se ...
- 【WPF】监听WPF的WebBrowser控件弹出新窗口的事件
原文:[WPF]监听WPF的WebBrowser控件弹出新窗口的事件 WPF中自带一个WebBrowser控件,当我们使用它打开一个网页,例如百度,然后点击它其中的链接时,如果这个链接是会弹出一个新窗 ...
- 【PHP SDK for OpenStack/Rackspace APIs】身份验证
在你使用php-opencloud之前必须先取得云服务提供商的身份验证.这是整个过程中最简单也是最让人沮丧的部分. 说它最简单是因为你只需要两部分信息: 云服务提供商的身份验证端点 用来身份验证的证书 ...
- dsplib使用备忘
1. 到TI官网下载与自己的芯片对应的dsplib库 2. 在工程属性里添加dsplib的头文件路径,lib库路径 3. 在源文件中包含dsplib头文件,如果是在.cpp文件里调用,包含头文件时要用 ...
- thinkphp模版调用函数方法
原文:thinkphp模版调用函数方法 {变量|函数1|函数2|函数3=参数1,参数2,参数3,###} ###为第4个参数,代表变量替换为第4个参数 举例: {$username|substr=0, ...
- Postfix+Amavisd-new+Spamassassin+ClamAV整合安装
1. 安装软件和依赖包 apt-get install amavisd-new spamassassin clamav-daemon mysql-client mysql-server apt-get ...
- extjs desktop startmenu (開始菜单)
extjs desktop 的開始菜单 二级菜单,仅仅是简单演示实现原理,如 须要动态生成,自己改造就可以,下面基本方法原理: 首先 建立一个js文件 生成開始菜单数据: function Get ...
- Java学习笔记4
Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...
- MSA2312 enclosure 闪断后
故障描述:由于电源原因,导致整个扩展柜闪断,硬盘全部为leftover状态. 存储划分配置:之前满配的一套MSA2312,划分为4个vd,后面两个vd无影响,前面2个VD都是一半在1号柜子,一半在2号 ...