Gson的入门使用

转载 2018年04月15日 21:24:33

Java对象和Json之间的互转,一般用的比较多的两个类库是Jackson和Gson,下面记录一下Gson的学习使用。

基础概念:
 Serialization:序列化,使Java对象到Json字符串的过程。
 Deserialization:反序列化,字符串转换成Java对象
 
使用Maven管理Gson,pom.xml导入gson的依赖
  <dependency>
     <groupId>com.google.code.gson</groupId>
     <artifactId>gson</artifactId>
     <version>2.3.1</version>
  </dependency>
 
Gson的两个基础方法
toJson();
fromJson();
 
Gson的创建方式一:直接new Gson对象
复制代码
// 使用new方法
Gson gson = new Gson();

// toJson 将bean对象转换为json字符串
String jsonStr = gson.toJson(user, User.class);

// fromJson 将json字符串转为bean对象
Student user= gson.fromJson(jsonStr, User.class);

// **序列化List**
String jsonStr2 = gson.toJson(list);

// **反序列化成List时需要使用到TypeToken getType()**
List<User> retList = gson.fromJson(jsonStr2,new TypeToken<List<User>>(){}.getType());
复制代码

 

Gson的创建方式二:使用GsonBuilder
使用new Gson(),此时会创建一个带有默认配置选项的Gson实例,如果不想使用默认配置,那么就可以使用GsonBuilder。
//serializeNulls()是GsonBuilder提供的一种配置,当字段值为空或null时,依然对该字段进行转换
Gson gson = new GsonBuilder().serializeNulls().create(); 
使用GsonBuilder创建Gson实例的步骤:
首先创建GsonBuilder,然后调用GsonBuilder提供的各种配置方法进行配置,
最后调用GsonBuilder的create方法,将基于当前的配置创建一个Gson实例。
 
GsonBuilder的一些配置
复制代码
 Gson gson = new GsonBuilder()
         .excludeFieldsWithoutExposeAnnotation() //不对没有用@Expose注解的属性进行操作
         .enableComplexMapKeySerialization() //当Map的key为复杂对象时,需要开启该方法
         .serializeNulls() //当字段值为空或null时,依然对该字段进行转换
         .setDateFormat("yyyy-MM-dd HH:mm:ss:SSS") //时间转化为特定格式
         .setPrettyPrinting() //对结果进行格式化,增加换行
         .disableHtmlEscaping() //防止特殊字符出现乱码
         .registerTypeAdapter(User.class,new UserAdapter()) //为某特定对象设置固定的序列或反序列方式,自定义Adapter需实现JsonSerializer或者JsonDeserializer接口
         .create();
复制代码

例如:Gosn对复杂Map的处理时需要用到其中的 enableComplexMapKeySerialization() 配置:

Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); //开启复杂处理Map方法
Map<List<User>, String> map = new HashMap<List<User>, String>();
// TODO 向map中添加数据
String jsonStr = gson.toJson(map);  //toJson
Map<List<User>, String> resultMap = gson.fromJson(jsonStr,new TypeToken<Map<List<User>, String>>() {}.getType()); //fromJson

注意:如果Map的key为String,则可以不使用GsonBuilder的enableComplexMapKeySerialization()方法,或者直接new Gson();

 

Gson的注解:
@Expose注解
复制代码
public class User {
  @Expose
  private String firstName;

  @Expose(serialize = false)
  private String lastName;

  @Expose(deserialize = false)
  private String emailAddress;

  private String password;
}
复制代码
@Expose中serialize和deserialize属性是可选的,默认两个都为true。
如果serialize为true,调用toJson时会序列化该属性,
如果deserialize为true,调用fromJson生成Java对象时不会进行反序列化。
注意:如果采用new Gson()方式创建Gson,@Expose没有任何效果。需要使用 gsonBuilder.excludeFieldsWithoutExposeAnnotation()方法。
 
@SerializedName注解    能指定该字段在序列化成json时的名称
  @SerializedName("w")
  private int width;

 

实际开发中我们会遇到比较复杂的Json,比如json中嵌套json数组,这个时候,就需要我们自定义序列化或反序列化方法了。
待续未完....
 
参考:

Spring Boot入门(一)- Gradle构建应用

转载自:http://blog.csdn.net/u013360850/article/details/53415005               http://blog.csdn.net/hgu...
  • zero__007
  • zero__007
  • 2017-02-26 09:11:18
  • 689

五分钟搞懂Gson的用法

谷歌GSON这个Java类库可以把Java对象转换成JSON,也可以把JSON字符串转换成一个相等的Java对象。Gson支持任意复杂Java对象包括没有源代码的对象。 其他的json解析库还有js...
  • u013628152
  • u013628152
  • 2016-01-20 16:06:20
  • 6948

Gson基本用法

Gson解析json
  • qq_29078329
  • qq_29078329
  • 2017-06-16 14:16:43
  • 796

Gson之基本用法

项目中,解析json数据时,一直使用Gson解析。对于Gson的基本使用没有什么问题,但并没有Gson更深入的认识。json作为主流的数据传递方式,深入理解Gson的用法还是很有必要的,那么系统的了解...
  • IO_Field
  • IO_Field
  • 2016-04-20 22:02:26
  • 2072

android-gson使用

android gson的使用
  • chenyannan0617
  • chenyannan0617
  • 2016-07-14 20:53:40
  • 2980

GSON的使用

  • 2014年09月30日 10:27
  • 521KB
  • 下载

Gson在java中的使用

Gson在java中的使用 liaoyun2016-12-25   在java的使用过程中,有时候我们会遇到这样一个问题——将一个对象序列化,保存起来,在以后的某个时候,又需要将保存的数据进行反...
  • liaoyun567
  • liaoyun567
  • 2016-12-25 23:58:36
  • 1406

Android之使用GSON解析JSON数据

GSON简介:GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。GSON可以很容易的将一串JSON数据转换为一个Java对象,或是将一个Java对象转换为相应的J...
  • ygd1994
  • ygd1994
  • 2016-05-08 18:49:30
  • 2312

Gson基础用法总结

一、基本用法 1、基本数据类型解析,例: Gson gson = new Gson(); int i = gson.fromJson("1", int.class);//1 double d = g...
  • wl1769127285
  • wl1769127285
  • 2016-04-06 15:45:29
  • 4400

Gson的详细使用(android必备,快速提高开发效率)

Gson的详细使用(android必备,快速提高开发效率)         接下来我要强烈给大家推荐一个google官方推荐使用的json解析库Gson。掌握好它之后,在以后的开发中就会减少非常多的代...
  • oQiHaoGongYuan
  • oQiHaoGongYuan
  • 2016-03-21 14:34:30
  • 13235
收藏助手
不良信息举报
您举报文章:Gson的入门使用
举报原因:
原因补充:

(最多只允许输入30个字)