反序列化- Jackson...

embedded/2024/9/23 11:59:09/

 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 对象(如 LocalDateTimeLocalDate)。

  • 处理特定类型的转换:例如,通过自定义序列化器处理 Long 类型精度问题,或者根据指定格式处理日期时间类型的转换。

FastJSON

FastJSON 是由阿里巴巴开源的一个高性能 JSON 处理库,主要用于在 Java 中快速地进行 JSON 的序列化(对象转 JSON)和反序列化(JSON 转对象)

核心特点
  1. 高性能FastJSON 的设计目标是提供高效的 JSON 处理能力,尤其是在大数据量的 JSON 数据处理时性能表现良好。
  2. 简洁的 APIFastJSON 提供了非常直观的 API,可以轻松完成 JSON 的序列化和反序列化操作,不需要太多的配置。
  3. 灵活的 JSON 操作FastJSON 提供 JSONObjectJSONArray 结构,支持动态处理 JSON 数据,不需要预先定义数据模型类。
  4. 内置各种类型支持:它可以轻松处理日期、时间、集合类型以及复杂的嵌套对象,支持不同的 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);}


http://www.ppmy.cn/embedded/115577.html

相关文章

前端工程化4:从0到1构建完整的前端监控平台

前言 一套完整的前端监控系统的主要部分&#xff1a; 数据上报方式数据上送时机性能数据采集错误数据采集用户行为采集定制化指标监控sdk 监控的目的&#xff1a; 一、数据上报方式 本文的方案是&#xff0c;优先navigator.sendBeacon&#xff0c;降级使用1x1像素gif图片…

开源模型应用落地-qwen模型小试-调用Qwen2-VL-7B-Instruct-更清晰地看世界-集成vLLM(二)

一、前言 学习Qwen2-VL ,为我们打开了一扇通往先进人工智能技术的大门。让我们能够深入了解当今最前沿的视觉语言模型的工作原理和强大能力。这不仅拓宽了我们的知识视野,更让我们站在科技发展的潮头,紧跟时代的步伐。 Qwen2-VL 具有卓越的图像和视频理解能力,以及多语言支…

面试爱考 | 设计模式

一、概述二、创建型 1. 单例&#xff08;Singleton&#xff09; IntentClass DiagramImplementationExamplesJDK 2. 简单工厂&#xff08;Simple Factory&#xff09; IntentClass DiagramImplementation 3. 工厂方法&#xff08;Factory Method&#xff09; IntentClass Diagr…

WPF DataGrid 单元格居中,头部居中,点击行改变背景色。

我得全局样式都写在了App.XAML文件下的ResourceDictionary里&#xff0c;方便全局引用 DataGrid样式和点击改变行背景色的触发器(BasedOn继承的是UI框架的样式&#xff0c;若无则删除&#xff0c;触发器还有鼠标移动事件等&#xff0c;按需自行修改添加) <Style x:Key&quo…

word-break和word-wrap

1&#xff0c;word-break:break-all 例如div宽200px&#xff0c;它的内容就会到200px自动换行&#xff0c;如果该行末端有个英文单词很长&#xff08;congratulation等&#xff09;&#xff0c;它会把单词截断&#xff0c;变成该行末端为conra(congratulation的前端部分)&#…

mongoDB 读取数据python版本实现

要使用Python从MongoDB读取数据&#xff0c;你可以使用pymongo库。首先确保你已经安装了pymongo&#xff0c;如果没有安装&#xff0c;可以通过pip来安装它&#xff1a; pip install pymongo 接下来&#xff0c;我将展示如何使用给定的MongoDB连接字符串来连接数据库&#xff…

【二等奖论文】2024年华为杯研赛D题成品论文(后续会更新)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接获取【2024华为杯研赛资料汇总】&#xff1a; https://qm.qq.com/q/jTIeGzwkSchttps://qm.qq.com/q/jTIeGzwkSc 题 目&#xff1a; 大数据驱动的…

Vue的指令v-model的原理

v-model的原理 原理&#xff1a;v-model本质上是一个语法糖。例如应用在输入框上&#xff0c;就是value属性和input事件的合写。 作用&#xff1a;提供数据的双向绑定 数据变&#xff0c;视图跟着变 :value视图变&#xff0c;数据跟这变 input 注意&#xff1a;$event用于在…