【Java 进阶篇】从Java对象到JSON:Jackson的魔法之旅

在这里插入图片描述

在现代的软件开发中,处理数据的能力是至关重要的。而当我们谈及数据格式时,JSON(JavaScript Object Notation)通常是首选。为了在Java中轻松地将对象转换为JSON,我们需要一种强大而灵活的工具。这时,Jackson就闪亮登场了。

前言

众所周知,Java是一种强类型语言,而JSON是一种弱类型的数据交换格式。这种类型之间的不匹配可能使得在它们之间进行转换变得复杂。Jackson库通过提供丰富的注解和灵活的配置选项,使得Java对象到JSON的转换变得简单而高效。

初识Jackson

在开始深入之前,让我们先了解一下Jackson是什么。Jackson是一个强大的Java库,用于处理JSON格式的数据。它提供了一组注解和一些核心类,使得在Java对象与JSON之间进行相互转换变得十分容易。

依赖配置

首先,我们需要在项目中添加Jackson的依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖:

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.13.0</version>
</dependency>

简单的对象转JSON

让我们从一个简单的Java对象开始,将其转换为JSON。考虑以下Person类:

import com.fasterxml.jackson.databind.ObjectMapper;

public class Person {
    private String name;
    private int age;

    // 省略构造函数、getter和setter
}

现在,我们将一个Person对象转换为JSON字符串:

public class JsonExample {
    public static void main(String[] args) throws Exception {
        // 创建一个Person对象
        Person person = new Person("John Doe", 25);

        // 创建一个ObjectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();

        // 将Person对象转换为JSON字符串
        String jsonString = objectMapper.writeValueAsString(person);

        // 输出结果
        System.out.println(jsonString);
    }
}

在这个例子中,ObjectMapper类的writeValueAsString方法将Person对象转换为JSON字符串。输出结果可能类似于:

{"name":"John Doe","age":25}

对象列表与Map的转换

对象列表转JSON

有时我们需要处理包含多个对象的列表。Jackson可以轻松地将对象列表转换为JSON数组。考虑以下PersonList类:

import java.util.List;

public class PersonList {
    private List<Person> persons;

    // 省略构造函数、getter和setter
}

现在,我们将一个PersonList对象转换为JSON字符串:

public class JsonListExample {
    public static void main(String[] args) throws Exception {
        // 创建一个包含多个Person对象的列表
        List<Person> personList = List.of(
                new Person("Alice", 30),
                new Person("Bob", 28),
                new Person("Charlie", 35)
        );

        // 创建一个PersonList对象
        PersonList personListObject = new PersonList(personList);

        // 创建一个ObjectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();

        // 将PersonList对象转换为JSON字符串
        String jsonString = objectMapper.writeValueAsString(personListObject);

        // 输出结果
        System.out.println(jsonString);
    }
}

在这个例子中,PersonList对象包含一个List<Person>字段,通过ObjectMapperwriteValueAsString方法,我们得到的JSON字符串可能类似于:

{"persons":[{"name":"Alice","age":30},{"name":"Bob","age":28},{"name":"Charlie","age":35}]}

Map转JSON

除了列表,有时我们还需要将Java中的Map对象转换为JSON。让我们看一个PersonMap类的例子:

import java.util.Map;

public class PersonMap {
    private Map<String, Person> personMap;

    // 省略构造函数、getter和setter
}

现在,我们将一个PersonMap对象转换为JSON字符串:

public class JsonMapExample {
    public static void main(String[] args) throws Exception {
        // 创建一个包含多个Person对象的Map
        Map<String, Person> personMap = Map.of(
                "first", new Person("Alice", 30),
                "second", new Person("Bob", 28),
                "third", new Person("Charlie", 35)
        );

        // 创建一个PersonMap对象
        PersonMap personMapObject = new PersonMap(personMap);

        // 创建一个ObjectMapper对象
        ObjectMapper objectMapper = new ObjectMapper();

        // 将PersonMap对象转换为JSON字符串
        String jsonString = objectMapper.writeValueAsString(personMapObject);

        // 输出结果
        System.out.println(jsonString);
    }
}

在这个例子中,PersonMap对象包含一个Map<String, Person>字段,通过ObjectMapperwriteValueAsString方法,我们得到的JSON字符串可能类似于:

{"personMap":{"first":{"name":"Alice","age":30},"second":{"name":"Bob","age":28},"third":{"name":"Charlie","age":35}}}

小结

在这篇博客中,我们初步了解了如何使用Jackson库将Java对象转换为JSON字符串。通过一些简单的例子,我们学会了处理包含对象列表和Map的情况。Jackson提供了强大而灵活的工具,使得在Java和JSON之间进行转换变得非常容易。希望这篇博客能帮助你更好地理解Jackson的基础用法,让你在处理数据时更加得心应手。

作者信息

作者 : 繁依Fanyi
CSDN: https://techfanyi.blog.csdn.net
掘金:https://juejin.cn/user/4154386571867191

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

uniapp实现表单弹窗

uni.showModal({title: 删除账户,confirmColor:#3A3A3A,cancelColor:#999999,confirmText:确定,editable:true,//显示content:请输入“delete”删除账户,success: function (res) {console.log(res)if(res.confirm){if(res.contentdelete){console.log(123123123213)uni.setSto…

Spark---集群搭建

Standalone集群搭建与Spark on Yarn配置 1、Standalone Standalone集群是Spark自带的资源调度框架&#xff0c;支持分布式搭建&#xff0c;这里建议搭建Standalone节点数为3台&#xff0c;1台master节点&#xff0c;2台worker节点&#xff0c;这虚拟机中每台节点的内存至少给…

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化:输入延迟、卡顿,大小核调度

关于 win11 系统下12代/13代英特尔大小核架构 CPU 的 VMware 优化&#xff1a;输入延迟、卡顿&#xff0c;大小核调度 一、前言二、VMware 的优化2.1 键鼠输入延迟问题的解决2.1.1 搜索内核隔离2.1.2 关闭内存完整性并重启2.1.3 搜索启用或关闭windows功能2.1.4 关闭 hyper-v 和…

利用 Apache Ranger 管理 Amazon EMR 中的数据权限

需求背景简介 系统安全通常包括两个核心主题&#xff1a;身份验证和授权。一个解决“用户是谁”的问题&#xff0c;另一个解决“用户允许执行什么操作”的问题。在大数据领域&#xff0c;Apache Ranger 是最受欢迎的授权选择之一&#xff0c;它支持所有主流大数据组件&#xff…

联想拯救者Lenovo Legion R9000K 2021H(82N6)原装出厂Windows10/Win11系统ISO镜像

链接&#xff1a;https://pan.baidu.com/s/13NkeCXNdV0Ib5eeRnZUeAQ?pwdnlr7 提取码&#xff1a;nlr7 拯救者笔记本电脑原厂WIN系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、联想电脑管家等预装程序 所需要工具&#xff1a;16G或以上的U盘 文…

关于Flink的旁路缓存与异步操作

1. 旁路缓存 1. 什么是旁路缓存? 将数据库中的数据,比较经常访问的数据,保存起来,以减少和硬盘数据库的交互 比如: 我们使用mysql时 经常查询一个表 , 而这个表又一般不会变化,就可以放在内存中,查找时直接对内存进行查找,而不需要再和mysql交互 2. 旁路缓存例子使用 dim层…

基于JavaWeb+SSM+Vue教学辅助微信小程序系统的设计和实现

基于JavaWebSSMVue教学辅助微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1 概述 随着信息时代的快速发展&#xff0c;互联网的优势和普及&#xff0c;人们生活…

HCIP-四、MUX-vlanSuper-vlan+端口安全

四、MUX-vlan&Super-vlan端口安全 MUX-vlan实验拓扑实验需求及解法1. 在SW1/2/3分别创建vlan10 20 30 402. SW1/2/3之间使用trunk链路&#xff0c;仅允许vlan10 20 30 40 通过。3. SW与PC/Server之间使用access链路。4. ping验证&#xff1a; Super-vlan端口安全实验拓扑实…

汽车级芯片NCV7518MWATXG 可编程六沟道低压侧 MOSFET预驱动器 特点、参数及应用

NCV7518MWATXG 可编程六沟道低压侧 MOSFET 预驱动器属于 FLEXMOS™ 汽车级产品&#xff0c;用于驱动逻辑电平 MOSFET。该产品可通过串行 SPI 和并行输入组合控制。该器件提供 3.3 V/5 V 兼容输入&#xff0c;并且串行输出驱动器可以采用 3.3 V 或 5 V 供电。内部通电重置提供受…

助力企业前行——ScalaSpark最佳实践课程

时间飞逝&#xff0c;转眼间我们的Scala&Spark培训课程已经圆满结束&#xff01;在这段精彩的学习旅程中&#xff0c;你们展现了坚韧、决心和追求卓越的品质。 scala(Scalable Language)是一种多范式的编程语言&#xff0c;其设计的初衷是要集成面向对象编程和函数式编程的…

【机器学习】On the Identifiability of Nonlinear ICA: Sparsity and Beyond

前言 本文是对On the Identifiability of Nonlinear ICA: Sparsity and Beyond (NIPS 2022)中两个结构稀疏假设的总结。原文链接在Reference中。 什么是ICA(Independent component analysis)&#xff1f; 独立成分分析简单来说&#xff0c;就是给定很多的样本X&#xff0c;通…

Linux基础命令3

移动&#xff0c;剪切文件 普通文件的移动剪切 现在在这儿 上图中&#xff0c;mv y.x ./tmp的意思&#xff0c;就是将当前路径下的y.x文件进行剪切&#xff0c;然后放到路径为当前路径下的tmp目录文件夹里面 操作完成后可以cd tmp&#xff0c;ls看到y.x文件已经在里面了 现在…

CUTLASS 1.3.3中的 Volta884_h884gemm

CUTLASS 是 CUDA C 模板抽象的集合&#xff0c;用于在 CUDA 内的所有级别和规模上实现高性能矩阵-矩阵乘法 (GEMM) 和相关计算。它采用了类似于 cuBLAS 和 cuDNN 中实现的分层分解和数据移动策略。 CUTLASS 最新版本为3.3&#xff0c;相比1.3.3变动较大。然而重温一下1.3.3仍然…

Django 创建项目时找不到数据库sqlite3

原因:PyCharm创建Django项目,找不到数据库sqlite3 解决&#xff1a;如果没有默认的db文件&#xff0c;则应在PyCharm终端中执行以下命令&#xff1a; python manage.py makemigrations python manage.py migrate

实现点击一个选框 使得一个组件的可选性修改

实现效果 代码 html <div class"divrow"><el-checkbox-group v-model"isSendTag" :max"1"><el-checkbox v-for"(item, index) in isSendTagOptions" :key"index" :label"item.value">{{item.…

PDF转Word,1行Python代码就够了,免费用

大家好&#xff0c;这里是程序员晚枫。 今年十一假期没出去旅游&#xff0c;在家里更新一套原创课程&#xff0c;&#x1f449;给小白的《50讲Python自动化办公》。 所有功能&#xff0c;都只需要1行代码&#xff0c;非常适合非程序员入门Python使用。 目前全网播放量直逼100…

Android RecyclerView点击宫格处于选择态外框变方框线,Kotlin

Android RecyclerView点击宫格处于选择态外框变方框线&#xff0c;Kotlin <uses-permission android:name"android.permission.READ_EXTERNAL_STORAGE" /><uses-permission android:name"android.permission.READ_MEDIA_IMAGES" /> implementa…

一起学docker系列之六如何搭建私服版本的Docker镜像仓库

目录 前言1 下载并运行私服版本的Docker镜像仓库2 准备上传私服的Docker镜像3 为镜像打上符合私服规范的标签4 修改Docker守护进程的配置文件5 推送镜像到私服版本的Docker镜像仓库6 验证私服的镜像结语 前言 Docker是一种开源的容器技术&#xff0c;可以让开发者和运维人员快…

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测

分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测 目录 分类预测 | Matlab实现KPCA-IDBO-LSSVM基于核主成分分析-改进蜣螂算法优化最小二乘支持向量机的分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.多特…

HarmonyOS(三)—— 应用程序入口—UIAbility

前言 学习过android的同学都是知道Activity&#xff0c;Activity是Android组件中最基本也是最为常见用的四大组件之一&#xff0c;用户可以用来交互为了完成某项任务。 Activity中所有操作都与用户密切相关&#xff0c;是一个负责与用户交互的组件&#xff0c;可以通过setCon…