java基础学习:序列化之 - ObjectMapper

文章目录

  • 一、介绍
  • 二、主要功能
  • 三、使用方法
  • 官网:

一、介绍

  • ObjectMapper 是 Jackson 库中的一个核心类,用于在 Java 对象和 JSON 数据之间进行转换。Jackson 是一个流行的 Java 库,用于处理 JSON 数据。它提供了灵活的方式来序列化和反序列化 Java 对象,即将 Java 对象转换成 JSON 格式的字符串,以及将 JSON 格式的字符串转换回 Java 对象。
  • ObjectMapper提供了读写JSON的功能,既可以读写基本pojo(普通Java对象),也可以读写通用JSON树模型(JsonNode),还提供了执行转换的相关功能。它也是高度可定制的,既可以处理不同风格的JSON内容,也可以支持更高级的对象概念,如多态性和对象标识。ObjectMapper还充当更高级的ObjectReader和objectwwriter类的工厂。Mapper(和它构造的ObjectReaders, ObjectWriters)将使用JsonParser和JsonGenerator的实例来实现JSON的实际读/写。请注意,虽然大多数读写方法都是通过这个类公开的,但有些功能只能通过ObjectReader和objectwwriter公开:具体来说,读取/写入较长的值序列只能通过ObjectReader. readvalues (InputStream)和ObjectWriter. writevalvalues (OutputStream)。

二、主要功能

  • 序列化(Serialization):将 Java 对象转换成 JSON 格式的字符串。这通常用于将数据存储到文件、数据库或通过网络发送到其他系统。
  • 反序列化(Deserialization):将 JSON 格式的字符串转换回 Java 对象。这通常用于从文件、数据库或网络接收的 JSON 数据中恢复 Java 对象。

三、使用方法

要使用 ObjectMapper,首先需要将其添加到你的项目中。如果你使用 Maven,可以添加以下依赖到你的 pom.xml 文件中:

<dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-databind</artifactId>  <version>你的版本号</version>  
</dependency>

然后,你可以使用 ObjectMapper 的实例来序列化和反序列化数据。

  • 序列化示例
import com.fasterxml.jackson.databind.ObjectMapper;  public class JsonExample {  public static void main(String[] args) {  try {  ObjectMapper mapper = new ObjectMapper();  Person person = new Person();  person.setName("John Doe");  person.setAge(30);  String jsonString = mapper.writeValueAsString(person);  System.out.println(jsonString);  } catch (Exception e) {  e.printStackTrace();  }  }  static class Person {  private String name;  private int age;  // getters and setters  }  
}
  • 反序列化示例
import com.fasterxml.jackson.databind.ObjectMapper;  public class JsonExample {  public static void main(String[] args) {  try {  ObjectMapper mapper = new ObjectMapper();  String jsonString = "{\"name\":\"John Doe\",\"age\":30}";  Person person = mapper.readValue(jsonString, Person.class);  System.out.println(person.getName() + " is " + person.getAge() + " years old.");  } catch (Exception e) {  e.printStackTrace();  }  }  static class Person {  private String name;  private int age;  // getters and setters  }  
}
  • 注意事项
    • ObjectMapper 是线程安全的,但创建它的开销相对较大,因此建议将其声明为单例或重用实例
    • 在处理复杂的对象或大型 JSON 数据时,注意内存和性能的影响。
    • 可以使用 Jackson 的注解来定制序列化和反序列化的行为,例如 @JsonIgnore、@JsonProperty 等。
    • Jackson 提供了丰富的配置选项,允许你根据需要调整其行为。

官网:

  • https://access.redhat.com/webassets/avalon/d/red-hat-jboss-enterprise-application-platform/7.1.beta/javadocs/com/fasterxml/jackson/databind/ObjectMapper.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47646.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Laravel Passport:API认证的瑞士军刀

Laravel Passport&#xff1a;API认证的瑞士军刀 在现代Web应用中&#xff0c;API的安全认证是一个核心问题。Laravel Passport提供了一个全面的解决方案&#xff0c;用于构建OAuth2.0认证服务器。它使得API的认证变得简单而强大&#xff0c;支持多种认证方式&#xff0c;包括…

使用Python批量压缩图片

当涉及到处理大量图片并确保它们符合特定大小要求时&#xff0c;Python 中的 PIL 库&#xff08;现在称为 Pillow&#xff09;提供了强大的工具。本文将详细介绍如何利用 Python 和 Pillow 库编写一个批量压缩图片的程序&#xff0c;以及如何将这些图片保存到指定目录中。 介绍…

Postgresql主键自增的方法

Postgresql主键自增的方法 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 插入数据 二.方法&#xff08;二&#xff09; &#x1f388;边走、边悟&#x1f388;迟早会好 一.方法&#xff08;一&#xff09; 使用 serial PRIMARY KEY 建表语句如下&#xf…

什么是变量提升

文章目录 发现宝藏变量提升的定义变量提升的类型变量提升的示例函数声明提升的示例注意事项 发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【宝藏入口】。 变量提升&#xff08;Hoisting&…

住宅IP解析:动态住宅IP和静态住宅IP区别详解

在互联网连接的世界中&#xff0c;IP地址是我们识别和访问网络资源的关键。住宅IP地址&#xff0c;特别是动态住宅IP和静态住宅IP&#xff0c;是两种不同类型的IP分配方式&#xff0c;它们在使用和功能上存在显著差异。 1. IP地址的稳定性 动态住宅IP&#xff1a;这种IP地址是…

mysql命令练习

创建数据表grade: CREATE TABLE grade( id INT NOT NULL&#xff0c; sex CHAR(1)&#xff0c; firstname VARCHAR(20) NOT NULL&#xff0c; lastname VARCHAR(20) NOT NULL&#xff0c; english FLOAT&#xff0c; math FLOAT, chinese FLOAT )&#xff1b; 向数据表grade中插…

[职场] MARKETINGSPECIALIST是什么 #笔记#微信#知识分享

MARKETINGSPECIALIST是什么 MARKETINGSPECIALIST&#xff0c;即市场营销专员&#xff0c;他们需要具备一定的专业知识和技能&#xff0c;以适应快速变化的市场环境。接下来&#xff0c;我们将详细探讨这个职位的工作内容、必备技能以及发展前景。 一、MARKETINGSPECIALIST是什么…

lua 游戏架构 之 LoaderWallet 异步加载

定义了一个名为LoaderWallet class&#xff0c;用于管理资源加载器&#xff08;Loader&#xff09;。这个类封装了资源加载的功能&#xff0c;包括异步加载&#xff0c;以及资源的释放和状态查询。下面是对代码的详细解释&#xff1a; ### 类定义和初始化 这里定义了一个名为…

WebPack5.0 快速入门

前端工程化WebPack5️⃣ 前置知识&#xff1a; 此文章属于前端——框架进阶篇&#xff0c;需要实现掌握&#xff1a;HTMLCSSJS三件套、Node... &#x1f600;推荐分享一波个人Blog文档&#xff1a; JavaScript、前端工程\模块化、邂逅Node.JS的那一夜 什么是WebPack❓ Web…

QT CNA上位机报错 解决方案

QT编译报错: -lControlCAN 解决方案 更换三个文件&#xff0c;即可解决(QT 自带的是32位库&#xff0c;应使用64位库文件)

windows下使用#include <nlohmann/json.hpp>

1.下载并解压&#xff1a;首先&#xff0c;需要从nlohmann/json的GitHub仓库下载源代码&#xff0c;并解压得到的文件。 地址&#xff1a; nlohmann/json: JSON for Modern C (github.com) https://github.com/nlohmann/json/tree/develop 2.拷贝头文件&#xff1a;解压后&a…

Kafka Producer之数据重复和乱序问题

文章目录 1. 数据重复2. 数据乱序 为了可靠性&#xff0c;Kafka有消息重试机制&#xff0c;但是同时也带来了2大问题 1. 数据重复 消息发送到broker后&#xff0c;broker记录消息数据到log中&#xff0c;但是由于网络问题&#xff0c;producer没有收到acks&#xff0c;于是再次…

【机器学习实战】Datawhale夏令营2:深度学习回顾

#DataWhale夏令营 #ai夏令营 文章目录 1. 深度学习的定义1.1 深度学习&#xff06;图神经网络1.2 机器学习和深度学习的关系 2. 深度学习的训练流程2.1 数学基础2.1.1 梯度下降法基本原理数学表达步骤学习率 α梯度下降的变体 2.1.2 神经网络与矩阵网络结构表示前向传播激活函数…

mysql如何排查死锁问题

MySQL默认的处理方式是自动检测到死锁后&#xff0c;其中一个事务会被选择为"牺牲者"并回滚&#xff0c;以解除死锁。被选择的事务会收到一个Deadlock Detected异常&#xff0c;然后回滚该事务&#xff0c;释放相关的资源&#xff0c;允许其他事务继续执行。 MySQL使…

Three.js 实战【2】—— 船模型海上场景渲染

停止了好久没有更新three这方面的文章了&#xff0c;从上两年还是vue2&#xff0c;一下子都换到vue3了&#xff0c;下面这些three都是基于vue3来进行开发的哈&#xff0c;先看一下这篇文章实现的效果哈。其中关于模型什么的资源都放在Git上了 初始化场景 安装three就直接通过n…

springboot系列十: 自定义转换器,处理JSON,内容协商

文章目录 自定义转换器基本介绍应用实例查看源码注意事项和细节 处理JSON需求说明应用实例 内容协商基本介绍应用实例debug源码优先返回xml注意事项和细节 ⬅️ 上一篇: springboot系列九: 接收参数相关注解 &#x1f389; 欢迎来到 springboot系列十: 自定义转换器&#xff0c…

ssh远程登录另一台linux电脑

大部分的博客内容所说的安装好ssh服务后&#xff0c;terminal输入 ssh -p port_number clientnameserver_ip 之后输入密码等等就可以登上别人的电脑 但是这是有一个前提的&#xff0c;就是这两台电脑要在同一个局域网下面。 如果很远呢&#xff1f; 远到不在同一个网下面怎么办…

1.JavaWeb开发简介(Tomcat安装使用+Servlet简介)

文章目录 一.web开发简介1.概念:2.特点:3.常用技术:4.服务架构5.web应用开发模式6.HTTP协议1)概念:2)HTTP最基本的过程是:3)IP/域名4)HTTP协议请求方式 7.JavaWeb的相关技术8.Java Web服务器 二、安装配置Tomcat1.简介2.Tomcat目录结构 三.Servlet的入门应用1.使用步骤2.使用注…

算法刷题笔记 字符串哈希(C++实现)

文章目录 题目描述基本思路实现代码 题目描述 给定一个长度为n的字符串&#xff0c;再给定m个询问&#xff0c;每个询问包含四个整数l1,r1,l2,r2&#xff0c;请你判断[l1,r1]和[l2,r2]这两个区间所包含的字符串子串是否完全相同。字符串中只包含大小写英文字母和数字。 输入格…

ABAP使用SQL直接更新数据库与使用IN UPDATE TASK的区别

1. 背景 刚接触ABAP的小伙伴常常会有这样的疑问&#xff0c;为什么不直接使用Open SQL直接更新数据库&#xff0c;而要把对DB的操作封装到IN UPDATE TASK中呢&#xff1f; 对于这个问题&#xff0c;比较常见的解释是&#xff0c;IN UPDATE TASK的方式会保证数据更新的一致性。…