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 提供了丰富的配置选项,允许你根据需要调整其行为。

官网:

相关推荐
weixin199701080162 分钟前
【保姆级教程】淘宝/天猫商品详情 API(item_get)接入指南:Python/Java/PHP 调用示例与 JSON 返回值解析
java·python·php
萌新小码农‍9 分钟前
python装饰器
开发语言·前端·python
环流_10 分钟前
redis核心数据类型在java中的操作
java·数据库·redis
KK溜了溜了12 分钟前
Python从入门到精通
服务器·开发语言·python
雨辰AI16 分钟前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务
带刺的坐椅20 分钟前
Java 流程编排新范式 Solon Flow:一个引擎,七种节点,覆盖规则/任务/工作流/AI 编排全场景
java·spring·ai·solon·flow
2401_8844541526 分钟前
mysql处理复杂SQL性能_InnoDB优化器与MyISAM差异
jvm·数据库·python
-To be number.wan41 分钟前
进程与线程的区别
学习·操作系统
llhm43 分钟前
tsp学习笔记——LINUX SDK编译2(2)Kernel6.1 Linux
linux·笔记·学习
知彼解己44 分钟前
Arthas:Java生产环境问题排查利器,从入门到实战
java