Jackson序列化&&FastJson序列化API使用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jackson序列化&&FastJson序列化API使用相关的知识,希望对你有一定的参考价值。
参考技术AJDK英文文档,墙裂不推荐看中文!!!
ObjectMapper的API文档
1 需要注意的是:
2 Jackson的API: `
3. Jackson提供的注解
Jackson 提供了一系列的注解,方便对 JSON 序列化和反序列化进行控制,下面介绍一些常用的注解:
1. 引入MAVEN依赖:
2. 实体类
3. 测试类:
首先注意的是 JDK1.8 中时间类,采用了一套新的API。
在这里我们采用是 LocalDate 类,若是 User 类中,没有使用注解,那么序列化结果为:
显然,这不是我们预期的 Json 串。并且,我们在反序列化过程中,会出现异常:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of java.time.LocalDate (no Creators, like default construct, exist):
cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)""name":"小胖","sports":["足球","游泳"],"date":"year":2019,"month":"MARCH","chronology":"id":"ISO","calendarType":"iso8601","dayOfMonth":27,"dayOfWeek":"WEDNESDAY","dayOfYear":86,"era":"CE","monthValue":3,"leapYear":false"; line: 1, column: 43] (through reference chain: com.JsonSerializer.User["date"])
大概意思:就是 LocalDate 的没有参数是 Object 的构造函数。不能实例化对象。
华丽的分割线 SpringBoot的处理
SpringBoot的解决方案:
Java bean的解决方案:
在 Java Bean 中使用注解,就可以进行反序列化和序列化。
执行结果:
FastJson 是性能极好的 JSON 解析器和生成器。
1. FastJson的优点:
2. FastJson的主要类:
1. FastJson的MAVEN依赖:
2. JSON准备:
ARR_JSON格式:
COMPLEX_JSON格式:
使用方式: github的使用文档
1. 通过 TypeReference 处理泛型对象
2. 使用 getType() 可以获取更好的性能。
1. TypeRefrence部分源码分析:
为什么这里的构造方法要是 protected 的,即我们无法直接创建该对象,只能使用匿名类创建 子类 对象。
getGenericSuperclass()的API方法
返回 Class 对象(类,接口,基本数据类型,void)的直接父类的 Type 类型。
如果父类是 parameterized [pə\'ræmɪtəraɪzd] 类型(也可以理解为 父类是泛型对象 ),那么返回的参数类型是父类的泛型类型。
基本原理:
使用 public static <T> T parseObject(String text, Class<T> clazz) 方法,边可完成JSON的反序列化。
1. 特殊JSON反序列化
2. 泛型丢失
我们可以看到,因为返回值需要泛型类型 T 所以我们采用的是 Class<T> ,防止返回Object对象,让用户强转。但需要注意: 这种方式在反序列化的时候,会丢失泛型类型。
方式一:TypeReference
方式二:使用parseArray
我们可以通过这个 API ,完成 Bean 对象转换成 String 类型。
String toJSONString(Object object, SerializerFeature... features)
若是对象的属性只是简单数据类型(基本数据类型,或者String类型)那么可以使用Class方式转化为Object对象。
若是一个对象里面的属性依旧是一个对象,那么我们就可以使用TypeRefrence进行转换。
我们在将JSON转换为对象的时候,就可以保留List<T>的泛型。即:
参考文章:
Java下利用Jackson进行JSON解析和序列化
使用FastJson处理JSON数据
fastjson如何json数组串转换为Object[]时如何指定各个数据项的数据类型
以上是关于Jackson序列化&&FastJson序列化API使用的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有jackson注释的情况下忽略反序列化的某些字段?
使用“key”和“value”属性反序列化 JSON 映射不适用于 Jackson
受 Deadbolt“限制”注释影响的 Jackson 解串器
Riak & Java - com.fasterxml.jackson.core.JsonParseException: 意外字符 ('<' (code 60))