Gson的使用并附上Utils
来源:互联网 发布:转置矩阵与原矩阵相乘 编辑:程序博客网 时间:2024/04/28 19:22
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); //toJsonMap<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数组,这个时候,就需要我们自定义序列化或反序列化方法了。
待续未完....
阅读全文
1 0
- Gson的使用并附上Utils
- common-utils的使用
- alsa-utils工具包的使用
- mtd-utils 工具的使用
- mtd-utils 工具的使用
- mtd-utils 工具的使用
- alsa-utils工具包的使用
- mtd-utils 工具的使用
- mtd-utils 工具的使用
- alsa-utils工具包的使用
- mtd-utils 工具的使用
- alsa-utils工具的使用
- 七牛云存储使用的utils
- DB Utils框架的使用
- mtd-utils工具的使用
- Gson的使用——Gson解析json数组并展示在ListView控件上
- Gson的使用——Gson解析json数组并展示在ListView控件上
- Gson的使用——Gson解析json数组并展示在ListView控件上
- 链式队列的基本操作与实现
- 深度学习基础之-梯度弥散和梯度爆炸及解决办法
- 基于NVIDIA TEGRA系列板卡的硬件解码及视频推流
- opencv hog源码解析
- 1.1 数组和链表:169.Majority Element (Leetcode)
- Gson的使用并附上Utils
- 记一次网络故障的解决
- 切换Fragment显示
- 【转】对Linux内核中进程上下文和中断上下文的理解
- spark mongodb
- JsonParseException: Unexpected character ('' (code 65279 / 0xfeff)): expected a valid value
- 三种Android图片压缩方法 压缩到指定大小
- 效果图第五课第一部分:柜子的制作等
- Object类/String类/StringBuffer类/Scanner类/Integer类中功能综合应用