反序列化- Jackson...
Jackson库
Jackson
库的核心功能是将Java
对象转换为JSON
字符串(序列化)以及将JSON
字符串转换为Java对象(反序列化)
反序列化器及序列化器
JSR310DateTimeDeserializerBase和JSR310FormattedSerializerBase抽象类
- 当你创建这些子类时,需要传入特定的日期类型(如
LocalDateTime
)和日期格式化器(DateTimeFormatter
)。这些子类继承了基础功能后,就变成了可以真正用于将 JSON 字符串解析为指定 Java 日期对象的反序列化器,或者将 Java 日期对象转换为 JSON 字符串的序列化器。
// 构造函数,接受具体的日期类型和格式化器protected JSR310DateTimeDeserializerBase(Class<T> supportedType, DateTimeFormatter formatter) {super(supportedType);this.formatter = formatter;}
自定义 Jackson 的序列化和反序列化行为
SimpleModule
允许开发者灵活地处理 Java 对象与 JSON 之间的转换。
-
注册自定义序列化器:通过
addSerializer()
方法,可以定义如何将特定的 Java 对象(如LocalDateTime
)转换为 JSON 字符串。 -
注册自定义反序列化器:通过
addDeserializer()
方法,可以定义如何将 JSON 字符串解析为特定的 Java 对象(如LocalDateTime
、LocalDate
)。 -
处理特定类型的转换:例如,通过自定义序列化器处理
Long
类型精度问题,或者根据指定格式处理日期时间类型的转换。
FastJSON
FastJSON
是由阿里巴巴开源的一个高性能 JSON 处理库,主要用于在 Java 中快速地进行 JSON 的序列化(对象转 JSON)和反序列化(JSON 转对象)
核心特点
- 高性能:
FastJSON
的设计目标是提供高效的 JSON 处理能力,尤其是在大数据量的 JSON 数据处理时性能表现良好。 - 简洁的 API:
FastJSON
提供了非常直观的 API,可以轻松完成 JSON 的序列化和反序列化操作,不需要太多的配置。 - 灵活的 JSON 操作:
FastJSON
提供JSONObject
和JSONArray
结构,支持动态处理 JSON 数据,不需要预先定义数据模型类。 - 内置各种类型支持:它可以轻松处理日期、时间、集合类型以及复杂的嵌套对象,支持不同的 JSON 格式。
public static void main(String[] args) {// 1. 序列化:Java 对象转 JSONUser user = new User(1, "John", "john@example.com");String jsonString = JSON.toJSONString(user);System.out.println("Serialized JSON: " + jsonString);// 2. 反序列化:JSON 转 Java 对象String jsonInput = "{\"email\":\"john@example.com\",\"id\":1,\"name\":\"John\"}";User deserializedUser = JSON.parseObject(jsonInput, User.class);System.out.println("Deserialized User: " + deserializedUser.getName());// 3. 动态 JSON 操作:使用 JSONObject 和 JSONArrayJSONObject jsonObject = new JSONObject();jsonObject.put("id", 2);jsonObject.put("name", "Jane");JSONArray jsonArray = new JSONArray();jsonArray.add(jsonObject);System.out.println("JSON Array: " + jsonArray.toJSONString());// 4. JSONPath 查询:从复杂 JSON 中提取数据String complexJson = "{\"store\": {\"book\": [{\"category\": \"fiction\",\"price\": 8.95},{\"category\": \"non-fiction\",\"price\": 12.99}]}}";Object result = JSONPath.read(complexJson, "$.store.book[?(@.price > 10)]");System.out.println("Books with price > 10: " + result);}