当前位置: 首页 > news >正文

Jackson - Java对象与JSON相互转换

在这篇文章中,我将向您展示如何使用Jackson-databind API来实现Java对象与JSON之间的绑定,以及如何将JSON数据转换为Java对象。

对于Java开发者来说,将JSON转换为Java对象及反向操作是一个常见的任务,因此我将通过示例演示如何完成这些操作。

ObjectMapper类提供了读写JSON的功能,可以将基本的POJO(Plain Old Java Object)序列化为JSON格式字符串,或者从JSON字符串反序列化为POJO。

依赖项

在开始之前,我们需要定义所需的Jackson API依赖项。让我们首先在pom.xml文件中添加以下依赖项:

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

此依赖项还会自动引入以下库到类路径中:

  • jackson-annotations-2.9.8.jar
  • jackson-core-2.9.8.jar
  • jackson-databind-2.9.8.jar

建议始终使用Maven中央仓库中的最新版本。

将Java对象转换为JSON示例

下面是一个使用ObjectMapper.writeValueXXX()方法将Java对象转换为JSON的例子。

Post.java
package net.javaguides.jackson.pojotojson;import java.util.Date;
import java.util.HashSet;
import java.util.Set;public class Post {private Long id;private String title;private String description;private String content;private Date postedAt = new Date();private Date lastUpdatedAt = new Date();private Set<Tag> tags = new HashSet<>();// 构造函数、getter和setter省略
}
Tag.java
package net.javaguides.jackson.pojotojson;public class Tag {private Long id;private String name;// 构造函数、getter和setter省略
}
JacksonPojoToJson.java
package net.javaguides.jackson.pojotojson;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;/*** 使用Jackson API将Java对象转换为JSON* @author Ramesh Fadatare*/
public class JacksonPojoToJson {public static void main(String[] args) throws IOException {// 创建ObjectMapper实例ObjectMapper mapper = new ObjectMapper();mapper.enable(SerializationFeature.INDENT_OUTPUT);// 创建一个Post对象Post post = new Post();post.setTitle("Jackson JSON API Guide");post.setId(100L);post.setDescription("Post about Jackson JSON API");post.setContent("HTML content here");post.setLastUpdatedAt(new Date());post.setPostedAt(new Date());// 创建一些预定义的标签Set<Tag> tags = new HashSet<>();tags.add(new Tag(1L, "Java"));tags.add(new Tag(2L, "Jackson"));tags.add(new Tag(3L, "JSON"));// 设置标签给帖子post.setTags(tags);// 将对象转换为JSON字符串String postJson = mapper.writeValueAsString(post);System.out.println(postJson);// 将JSON字符串保存到文件FileOutputStream fileOutputStream = new FileOutputStream("post.json");mapper.writeValue(fileOutputStream, post);fileOutputStream.close();}
}

输出结果如下:

{"id" : 100,"title" : "Jackson JSON API Guide","description" : "Post about Jackson JSON API","content" : "HTML content here","postedAt" : 1556025668077,"lastUpdatedAt" : 1556025668077,"tags" : [ {"id" : 3,"name" : "JSON"}, {"id" : 1,"name" : "Java"}, {"id" : 2,"name" : "Jackson"} ]
}

注意,我们也可以将JSON写入外部文件。在这个例子中,我们将JSON写入名为"post.json"的文件。

将JSON转换为Java对象

下面是一个使用ObjectMapper.readValue()方法将JSON转换为Java对象的例子。在这个例子中,我们将从外部"post.json"文件读取JSON并将其转换成Java对象。

JacksonJsonToPojo.java
package net.javaguides.jackson.jsontopojo;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;import net.javaguides.jackson.pojotojson.Post;
import net.javaguides.jackson.pojotojson.Tag;/*** 使用Jackson将JSON转换为Java对象* @author Ramesh Fadatare*/
public class JacksonJsonToPojo {public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {ObjectMapper mapper = new ObjectMapper();// 读取JSON文件并转换为Java对象InputStream fileInputStream = new FileInputStream("post.json");Post post = mapper.readValue(fileInputStream, Post.class);fileInputStream.close();// 打印帖子详情System.out.println("打印帖子详情");System.out.println(post.getId());System.out.println(post.getTitle());System.out.println(post.getDescription());System.out.println(post.getContent());System.out.println(post.getLastUpdatedAt());System.out.println(post.getPostedAt());// 打印这个帖子的标签System.out.println("打印帖子的标签详情:" + post.getTitle());for (Iterator<Tag> iterator = post.getTags().iterator(); iterator.hasNext();) {Tag tag = iterator.next();System.out.println(tag.getId());System.out.println(tag.getName());}}
}

输出结果如下:

打印帖子详情
100
Jackson JSON API Guide
Post about Jackson JSON API
HTML content here
Tue Apr 23 18:51:08 IST 2019
Tue Apr 23 18:51:08 IST 2019
打印帖子的标签详情:Jackson JSON API Guide
2
Jackson
1
Java
3
JSON

相关文章:

Jackson - Java对象与JSON相互转换

在这篇文章中&#xff0c;我将向您展示如何使用Jackson-databind API来实现Java对象与JSON之间的绑定&#xff0c;以及如何将JSON数据转换为Java对象。 对于Java开发者来说&#xff0c;将JSON转换为Java对象及反向操作是一个常见的任务&#xff0c;因此我将通过示例演示如何完…...

怎麼解決路由器IP地址衝突?

路由器IP地址衝突通常發生在網路中有兩個設備嘗試使用相同的IP地址時。這種衝突會導致網路連接問題&#xff0c;因為每個設備需要一個唯一的IP地址才能正常通信。 1. 重啟設備 重啟路由器和設備&#xff1a;有時候簡單的重啟可以解決問題&#xff0c;設備重新獲取一個新的IP地…...

趣味数学 2.3.7 | 完全免费,无注册登录,简约纯净

趣味数学是一款完全免费的数学学习软件&#xff0c;支持安卓系统。它无需登录注册&#xff0c;界面简约纯净&#xff0c;分类详细&#xff0c;涵盖趣味数学、数学初练、应用计算、数字推理、图形推理、数字2048、题目练习和数学知识等多个分类。每个分类包含丰富的题目和关卡&a…...

Oracle ASM特性介绍和增删盘操作

1. 介绍 1.1. 在没有ASM之前ORACLE数据库靠什么去解决存储问题&#xff1a; 裸设备:裸设备就是没有被文件系统格式化的分区或者是直接挂载到操作系统上的磁盘。ORACLE可以直接将数据写入到裸设备中&#xff0c;读写能非常优异。像ORACLE的数据文件、控制文件、REDO日志在过去…...

深度优先搜索迷宫路径

深度优先搜索迷宫路径 问题描述 我们需要编写一个程序&#xff0c;通过深度优先搜索&#xff08;DFS&#xff09;找到从迷宫左上角到右下角的一条通路。 迷宫的表示&#xff1a; 迷宫由 0 和 1 构成的二维数组表示。0 表示可以走的路径&#xff0c;1 表示障碍。用户输入迷宫的…...

多媒体技术的 发展阶段----高中信息技术教资面试

上课&#xff0c;同学们好&#xff01;请坐 在正式上课之前&#xff0c;老师带来 了一段微课视频&#xff0c;请同学们认真观看大屏幕。等下来回答老师的问题。 好&#xff0c;视频播放完成了&#xff0c;现在老师想问问大家。大家从视频中都看到了什么尼&#xff1f;好&…...

行为型设计模式之《责任链模式》实践

定义 责任链模式&#xff08;Chain Of Responsibility Pattern&#xff09;顾名思义&#xff0c;就是为请求创建一条处理链路&#xff0c;链路上的每个处理器都判断是否可以处理请求&#xff0c;如果不能处理则往后走&#xff0c;依次从链头走到链尾&#xff0c;直到有处理器可…...

中酱黑松露手工古法酱油,邂逅独特 “酱油红”

在美食的世界里&#xff0c;调味品往往扮演着画龙点睛的角色&#xff0c;它们虽不似主食材那般夺目&#xff0c;却能悄无声息地赋予菜肴灵魂与韵味。而今天&#xff0c;要带大家走进的&#xff0c;便是中酱手工古法酱油所营造出的独特美味天地&#xff0c;去领略那一抹别具魅力…...

Java NIO channel

channel(通道)&#xff0c;byteBuffer(缓冲区)&#xff0c;selector&#xff08;io多路复用&#xff09;&#xff0c;通道FileChannel,SocketChannel的transferTo,transferFrom,MappedByteBuffer实现了零拷贝。 JVM调操作系统方法&#xff0c;read,write&#xff0c;都可以送字…...

智能交通(8)——腾讯开悟智能交通信号灯调度赛道

本文档用于记录参加腾讯开悟智能信号灯调度赛道的模型优化过程。官方提供了dqn和target_dqn算法&#xff0c;模型的优化在官方提供的代码基础上进行。最终排名是在榜单16&#xff0c;没能进入最后的决赛。 一.赛题介绍 赛题简介&#xff1a;在本地赛题中&#xff0c;参赛团队…...

ip所属地址是什么意思?怎么改ip地址归属地

在数字化时代&#xff0c;IP地址作为网络设备的唯一标识符&#xff0c;不仅关乎设备间的通信&#xff0c;还涉及到用户的网络身份与位置信息。IP所属地址&#xff0c;即IP地址的归属地&#xff0c;通常反映了设备连接互联网时的地理位置。本文将深入解析IP所属地址的含义&#…...

攻防世界 ctf刷题 新手区1-10

unserialize3 因为我上个笔记写了 php返序列化 所以先趁热打铁 看这个题目名字 我们就知道是 反序列化呀 因为flag有值所以 我们先输个 111 看看有没有线索 没线索但是这边 有个发现就是他是使用get方式传参的 可能他会把我们的输入 进行传入后台有可能进行反…...

Node做一个自动删除指定文件和文件夹工具

node14 可以搭配脚手架工具实现自动实现删除 // 引入path模块&#xff0c;用于处理文件路径 const path require(path); // 引入fs模块的promises API&#xff0c;用于异步文件操作 const fs2 require(fs).promises; // 引入fs模块&#xff0c;用于同步文件操作 const fs …...

陈若尧新歌《一来二去》陆续登陆全球音乐平台

由青年演员&#xff0c;歌手陈若尧带来的全新创作单曲《一来二去》由索尼音乐发行&#xff0c;于2024年11月18日陆续全球上线。这也是陈若尧与索尼音乐合作的第一首单曲。探索古典风格与流行音乐的新结合。歌曲上线不久,就因优美抒情的动人旋律&#xff0c;诗意而意味深远的歌词…...

【Docker】针对开发环境、测试环境、生产环境如何编排?

目录 一、引言 二、Docker Compose 文件基础 三、针对不同环境的 Docker 编排 开发环境 测试环境 生产环境 四、配置文件全局变量的编写 五、总结 一、引言 在软件开发和部署的过程中&#xff0c;不同的环境有着不同的需求和配置。Docker 作为一种强大的容器化技术&…...

小程序项目的基本组成结构

分类介绍 项目根目录下的文件及文件夹 pages文件夹 用来存放所有小程序的页面&#xff0c;其中每个页面都由4个基本文件组成&#xff0c;它们分别是&#xff1a; .js文件&#xff1a;页面的脚本文件&#xff0c;用于存放页面的数据、事件处理函数等 .json文件&#xff1a;…...

001-mysql安装

[rootcentos701 ~]# hostname -I 10.0.0.200 172.17.0.1 [rootcentos701 ~]# hostname centos701 [rootcentos701 ~]# rpm -qa | grep mariadb [rootcentos701 ~]# rpm -e --nodeps mariadb-libs-5.5.65-1.el7.x86_64 [rootcentos701 ~]# useradd mysql -s /sbin/nologin #创建…...

预训练模型与ChatGPT:自然语言处理的革新与前景

目录 一、ChatGPT整体背景认知 &#xff08;一&#xff09;ChatGPT引起关注的原因 &#xff08;二&#xff09;与其他公司的竞争情况 二、NLP学习范式的发展 &#xff08;一&#xff09;规则和机器学习时期 &#xff08;二&#xff09;基于神经网络的监督学习时期 &…...

高通---Camera调试流程及常见问题分析

文章目录 一、概述二、Camera配置的整体流程三、Camera的代码架构图四、Camera数据流的传递五、camera debug FAQ 一、概述 在调试camera过程中&#xff0c;经常会遇到各种状况&#xff0c;本篇文章对camera调试的流程进行梳理。对常见问题的提供一些解题思路。 二、Camera配…...

【冷冻电镜】RELION5.0使用教程总结

准备数据集&#xff1a; A test data set composed of 5 tomograms of immature HIV-1 dMACANC VLPs, which is available at EMPIAR-10164. 原始倾斜系列数据需要是单独的影片或单独的运动校正图像&#xff0c;但不是组合倾斜系列堆栈。 mdoc 文件包含每个倾斜系列的元数据。…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频

使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

Golang——9、反射和文件操作

反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一&#xff1a;使用Read()读取文件2.3、方式二&#xff1a;bufio读取文件2.4、方式三&#xff1a;os.ReadFile读取2.5、写…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

【java】【服务器】线程上下文丢失 是指什么

目录 ■前言 ■正文开始 线程上下文的核心组成部分 为什么会出现上下文丢失&#xff1f; 直观示例说明 为什么上下文如此重要&#xff1f; 解决上下文丢失的关键 总结 ■如果我想在servlet中使用线程&#xff0c;代码应该如何实现 推荐方案&#xff1a;使用 ManagedE…...