Gson-json操作

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。
Gson原本是创造给Google内部人员使用并运用在目前的的很多Google项目中。现在被很多公共项目和公司所使用。

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());

二:使用GsonBuilder
使用new Gson(),此时会创建一个带有默认配置选项的Gson实例,如果不想使用默认配置,那么就可以使用GsonBuilder
serializeNulls()是GsonBuilder提供的一种配置,当字段值为空或null时,依然对该字段进行转换

Gson gson = new GsonBuilder().serializeNulls().create(); 

使用GsonBuilder创建Gson实例的步骤:

  1. 创建GsonBuilder,
  2. 调用GsonBuilder提供的各种配置方法进行配置,
  3. 调用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;
}

@Exposeserializedeserialize属性是可选的,默认两个都为true
如果serializetrue,调用toJson时会序列化该属性,
如果deserializetrue,调用fromJson生成Java对象时不会进行反序列化。

注意:如果采用`new Gson()`方式创建Gson,`@Expose`没有任何效果。需要使用`gsonBuilder.excludeFieldsWithoutExposeAnnotation()`方法。

@SerializedName注解
能指定该字段在序列化成json时的名称

@SerializedName("w")
private int width;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值