【写在前面】
第一次接触JSON并不是在老师的课堂上 而是在期末实训的时候在做很多异步处理时 真的是需要用到JSON。毕竟JSON势必比XML可读性强 且方便使用。当时我是向一位师兄请教,后来他就给我介绍了 GSON,这个由google开发的JAVA API ,用于java对象和json之间的相互转换。
【简介】
json是一种文本形式的数据交换格式,常用于前端和后代进行数据交换。(spring4mvc则不需要考虑如何转换json对象,因为注解@ResponseBody下面的那个方法返回的对象就是可以直接转换为json格式,不需要我们用第三方插件,这都是后话了)
【概要】
<1>最常用的java API莫过于jackson, JSON-JAVA以及本文章介绍的GSON类库。
<2>本章节内容大纲:
1.Gson基本用法;
2.Gson中使用泛型
【工具包】
下载gson-2.3.1.jar包,放在Eclipse的WEB-INF下的lib目录。
【正文】
一.GSON基本用法
二.Gson中使用泛型(常用)
===============================================================================================================================
一 GSON基本用法
Gson提供fromJson()和toJson()两种直接用与解析和生成方法。前者实现反序列化,则是将Json格式的数据转换为对象,后者则实现序列化,将对象转换为Json格式。
常用的方法有五个
1.基本数据类型
Gson gson=new Gson();
//整型
int i=gson.fromJson("100",int.class);
//双精度浮点型
double d=gson.from("\"99.99"\".double.class);
//布尔类型
boolean b=gson.fromJson("true",boolean.class);
//字符串类型
String str=gson.fromJson("String",String.class);
2.基本数据类型生成
Gson gson=new Gson();
String jsonNum=gson.toJson(100);
String jsonBoo=gson.toJson(true);
String jsonStr=gson.toJson("str");
3.POJO类(Plain Ordinary Java Obeject,普通的java对象,可以理解为普通的javabean.与一般的javabean不同,POJO类只能拿来装数据,而javabean中除了数据还可以有方法,比如最常用的get set方法)
public class Student{
public String name;
public int age;'
public String school;
}
//解析对象,转换为Json格式
Gson gson=new Gson();
Student student=new Student("Carmen仔",18);
String jsonObject=gson.toJson(student);
//最后就会以{"name":"Carmen仔","age":18}
//解析Json
Gson gson=new Gson();
String jsonStr="{\"name\":\"age\""18}";
Student student=gson.fromJson(JsonString.Student.class);
二 GSON中使用泛型
1.
//字符串'数组
["JAVA","Android","JavaScript"]
当我们要通过GSON解析这个JSON的时候,一般有两种方法,使用数组或者是使用List。了解集合的孩子们都知道,List便于增删,所以一般都是使用List来解析Json
Gson gson=new Gson();
String jsonArr="[\JAVA"\,\"Android\",\"JavaScript\"]";
String[] strs=gson.fromJson(jsonArr,String.class);
String.class是不可以直接改为List<String>.class。我查阅过相关资料,解释。。虽然我还是不是很懂,但是我还是先贴出来吧- -。
上面的解释是这样的:对于JAVA而言,List<String>和List<Student>这两个字节码文件只一个那就是LIst.class,这是Java泛型使用时要注意的问题 泛型擦除。
(看到的孩子 不知道你懂不懂 反正 我 还是不懂)
反正解决方法就是用Gson提供的TypeToken类,它实现了对泛型的支持。
要转换成List<String>,则需要这样写
Gson gson=new Gson();
String jsonArr="[\JAVA"\,\"Android\",\"JavaScript\"]";
String[] strs=gson.fromJson(jsonArr,String.class);
List<String> strList=gson.fromJson(jsonArr,new TypeToken<List<String>>(){}.getType());
对于上面为什么要有一个大括号我是不懂的,上网查了一下,还是不懂= =:
TypeToken的构造方法为producted关键字所修饰,所以上面要写成new TypeToken<List<String>>(){}.getType而不是new TypeToken<List<String>>().getType();
2. GSON中支持泛型对实现POJO接口的影响
可以避免要重复写一些不必要的代码
如果不支持泛型
public class Response{
public int code;
public String message;
public User data;
}
支持泛型
public class Response<T>{
public int code;
public String message'
public T data;
}
当data字段是User时,那就是 Response <User> ,列表的话,就是Response<List<User>>
好了,第一部分就先写到这里了。下一部分会介绍一下GsonBuilder()的作用及GSON的一些其他方法。
(对于上面的TypeToken那里,或许你们会觉得总是需要new TypeToken<List<String>>(){}.getType()每次都要这样写很麻烦,可以参考一下这篇博客,《搞定Gson泛型封装》,链接地址:htttp://www.jianshu.com/p/d62c2be60617)