首页 > 编程语言 >java基础学习:序列化之 - ObjectMapper

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

时间:2024-07-19 18:55:24浏览次数:13  
标签:Java String person JSON 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

标签:Java,String,person,JSON,java,序列化,ObjectMapper
From: https://blog.csdn.net/yuming226/article/details/140465603

相关文章

  • 对JAVA的HashMap的深入理解
    今天我们来从源码层面分析JAVA的HashMap底层实现原理,我们还是先从HashMap的构造方法来分析。我们发现HashMap有四个构造方法,首先还是来分析它的无参构造方法,源码如下:这个方法比较简单定义了一个数据成员loadFactor的值,设置为0.75。我们再来看第二个方法HashMap(int)发......
  • 使用 JavaScript 检测大写锁定键(Detect Caps Lock with JavaScript)(转)
    原文地址:DetectCapsLockwithJavaScript-使用JavaScript检测大写锁定ByDavidWalshonFebruary6,2024作者:大卫·沃尔什,2024年2月6日Anyoneiscapableofhavingtheircapslockkeyonatanygiventimewithoutrealizingso.Userscaneasilyspotunwan......
  • JavaScript 基础知识 Day01
    一、计算机基础知识1、计算机数据存储单位位(Bit):1bit可以保存一个0或者1(最小的存储单位)字节(Byte):1B=8b千字节(KB):1KB=1024B兆字节(MB):1MB=1024KB吉字节(GB):1GB=1024MB太字节(TB):1TB=1024GB2、关于JavaScript 它是在1952年2月由网景开......
  • 深入理解Java中的泛型与类型安全
    深入理解Java中的泛型与类型安全大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的泛型和类型安全。泛型是Java的一个强大特性,它使得代码更加通用、灵活,同时保持了类型安全。1.泛型概述1.1什么是泛型泛型允许我们在定义类、......
  • Java中的内存管理与调优策略
    Java中的内存管理与调优策略大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨Java中的内存管理与调优策略。Java的内存管理涉及多个方面,包括垃圾回收、堆和非堆内存的配置,以及性能优化。通过这些策略,我们可以显著提高应用程序的性能和稳......
  • 使用Java和RabbitMQ构建消息队列系统
    使用Java和RabbitMQ构建消息队列系统大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将深入探讨如何使用Java和RabbitMQ构建一个高效的消息队列系统。RabbitMQ是一个开源的消息中间件,支持多种消息协议,能够帮助我们实现异步处理和解耦。1.Rabbit......
  • 基于Java和MySQL的数据库优化技术
    基于Java和MySQL的数据库优化技术大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何基于Java和MySQL进行数据库优化,提升系统的性能和稳定性。我们将从查询优化、索引使用、事务管理以及连接池配置几个方面来介绍具体的优化技术。1.查询......
  • Java中的线程池管理与并发性能优化
    Java中的线程池管理与并发性能优化大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Java中有效管理线程池,以及如何通过优化并发性能提升应用的效率。线程池是管理线程的一个重要工具,能够提高系统的并发处理能力,并减少线程创建和销毁的......
  • 使用Java和GraphQL构建高效的API服务
    使用Java和GraphQL构建高效的API服务大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探索如何使用Java和GraphQL构建高效的API服务。GraphQL是一种用于API的查询语言,能够提供更加灵活和高效的数据获取方式。我们将通过实际代码示例来展示如何在J......
  • Java中的多线程编程与锁机制解析
    Java中的多线程编程与锁机制解析大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!今天,我们将深入探讨Java中的多线程编程与锁机制。多线程编程在现代应用开发中至关重要,它允许程序同时执行多个任务,从而提高程序的响应性和性能。我们将通过代码示例来解析Jav......