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转换成对象的时候,上面代码是从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. 不容错过的UI设计素材大合集

    免费PSD素材 TETHR by InVision 这是出自InVision的8款PSD文件,其中包含了100个模板和超过500个UI控件.来自InVision和UI8的设计师一同协作完成了这套UI ...

  2. JDBC操作数据库的学习(1)

    单单对数据库的操作,比如说MySQL,我们可以在命令行窗口中执行,但是一般是应用程序要操作数据库,因此我们应该在程序中的代码上体现对数据库的操作,那么使用程序应用如何操作数据库呢?那就要使用到数据库的 ...

  3. 【Demo 0008】Java基础-抽象类

    本掌学习要点:       1.  了解抽象类的定义及使用场景:       2.  掌握final修饰的类.方法以及变量作用及用法:       3.  掌握abstract 修饰的类及方法作用及用 ...

  4. Delphi Socket的最好项目——FastMsg IM(还有一些IM控件),RTC,RO,Sparkle等等,FileZilla Client/Server,wireshark,NSClient

    https://www.nsclient.org/nsclient/ 好好学习,天天向上

  5. OCA读书笔记(5) - 管理ASM实例

    Objectives:Describe the benefits of using ASMManage the ASM instanceCreate and drop ASM disk groupsE ...

  6. IT痴汉的工作现状18-思维定式

    前阵子周权出差给我带回来一个净水器,是直接安装在水龙头上的,小巧方便.我依照安装说明一步一步组装好了,感觉说明书还是比較靠谱的,没有遇到意外.但我发现它的净水.原水的button好像是有问题.它的结构 ...

  7. 研读asp.net排课功能实现学习笔记

    1.datatable.select 方法,返回的是一个datarow数组 DataRow[] drs =                    dtHBKC.Select("Subject ...

  8. Java方法区和运行时常量池溢出问题分析(转)

    运行时常量池是方法区的一部分,方法区用于存放Class的相关信息,如类名.访问修饰符.常量池.字段描述.方法描述等. String.intern()是一个native方法,它的作用是:如果字符串常量池 ...

  9. android端向服务器提交请求的几种方式

    1.GET方式 其实GET方式说白了,就是拼接字符串..最后拼成的字符串的格式是: path ?  username= ....& password= ...... public boolea ...

  10. 它们的定义Adapterg在etView( )正在使用View.setTag()与不同的是不使用。

    首先看使用Tag案件. @Override public View getView(int position, View view, ViewGroup group) { ViewHolder hol ...