JSON处理工具类库-Gson
1. Gson介绍
GSON是Google提供的用来在Java对象和JSON数据之间进行映射的Java类库。可以将一个Json字符转成一个Java对象,或者将一个Java转化为Json字符串。
特点:
Gson工具类,需要导入jar包:
gson-2.2.4.jar3. Gson的创建方式
3.1. 无参构造方法
Gson gson = new Gson();4. Gson的基本用法
public String toJson(Objcet obj)- 将任意类型转换成Json格式字符串
public T fromJson(String jsonStr, T.class)- 将json字符串转化为指定类型为T的Java对象
5. Gson的一些案例
5.1. 案例-输出JSON字符串包含null值的属性
public static void main(String[] args) {HashMap<String, Object> map = new HashMap<String, Object>();map.put("name", "mafly");map.put("age", "18");map.put("sex", null);String jsonString = new Gson().toJson(map);System.err.println(jsonString);}
就是这个当Sex=null时,用Gson的tojson方法会把null值忽略,从而序列化之后输出不包含这个属性值的Json串。其实预期是输出{"sex": ""}或{"sex": null},那怎么做呢?
通过搜索引擎发现,网上大概存在以下三种解决方案:
- 调用
toJson(Object src, Type typeOfSrc, JsonWriter writer)方法 - 注册自定义
TypeAdapter - 设置
serializeNulls属性值(推荐)
使用第三种方式,源码如下:
GsonBuilder gsonBuilder = new GsonBuilder();
String jsonString1 = gsonBuilder.serializeNulls().create().toJson(map);
System.err.println(jsonString1);
输出符合需求了,{"sex": null}
因为调用serializeNulls()后,Gson设置serializeNulls属性值为true,默认是false,源码:
public GsonBuilder serializeNulls() {
this.serializeNulls = true;
return this;
}
5.1.1. Gson其他使用要点
可以用@SerializedName注解给属性重命名,用@Expose注解标识属性不进行序列化,支持 Map 的 key 为复杂对象的形式,日期类型转化为特定格式,还有区分版本进行显示,这些在日常项目中都极常用到,只不过好像我们之前都是自己实现的。
简单建立了一个 UserInfo 实体类,里边包含了username、age、sex这三个属性值。试着测试了一下其中一两个:
@Expose想让谁输出谁输出,注解代码如图:

设置excludeFieldsWithoutExposeAnnotation(),看下面第三行是输出
@SerializedName想怎么显示怎么显示,注解代码如图:

想把age再 Json序列化时显示maflyAge,现在就可以了,输出如下图
@Since、@Until不同版本不同数据,注解代码如图

这里要设置setVersion(3.2),@Since标注的在3.2版本或之后才会输出,@Until标注的只在3.2版本前才有。效果输出如下图
当然,还有好多特性呢,比如字段首字母大写阿、结果格式化阿等等
