Jackson API指南(*)

article/2025/10/28 1:41:01

一.Jackson 概述 与 依赖

1.市面上用于在 Java 中解析 Json 的第三方库,随便一搜不下几十种,其中的佼佼者有 Google 的 Gson, Alibaba 的 Fastjson以及本文的 jackson。
2.我们在学习一门技术之前,首选要了解这门技术的优劣性,以及和它同等技术的对比。fastjson这么快老外为啥还是热衷 jackson?
3.使用 Jackson 导入 jackson-databind、 jackson-annotations、jackson-core 3 个主要模块基本满足开发,其中 jackson-databind内部依赖了 jackson-annotations 与 jackson-core ,所以 Maven 应用时,只要导入 jackson-databind 一个,则同时也导入了 jackson-annotations 与 jackson-core 依赖。

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.0</version>
</dependency>

二.Jackson 使用前情提要

1.默认情况下,ObjectMapper 在序列化对象时,将实体所有的字段一 一序列化,无论这些字段是否有值,是否为 null。

2.如果实体的某个字段没有提供 getter 方法,则该字段不会被序列化。

3.Spring Boot Web 组件默认使用 Jackson 进行对象的序列化与反序列化,即页面传入的参数,会自动反序列化为后台对象,后台传给前端的对象,也会序列化后输出。所以需要注意返回给页面的对象默认不能使用 Jackson 以外的 Json 库序列化,比如返回一个 Gson 的 JsonObject 给前端,则会报错,因为显然 Jackson 序列化时会失败。

4.Jackson 提供三种不同的方法来操作 JSON:

1)流式API - 使用 Stream() 的方式对 Json 的每一个组成部分进行最细粒度的控制,JsonParser 读取数据,JsonGenerator 写入数据。2)树模型 - 将 JSON 文件在内存里以树的形式表示,通过 JsonNode 处理单个Json节点,类似于 XML 的 DOM 解析器。(常用)3)databind 模块 - ObjectMapper/写 JSON 是 POJO 序列化与反序列化 Json 最方便的方式。(常用)

三.ObjectMapper 序列化对象

1.ObjectMapper 主要用于对 Java 对象(比如 POJO、List、Set、Map 等等)进行序列化与反序列化。

2.ObjectMapper 除了能在 Json 字符串与 Java 对象之间进行转换,还能将 Json 字符串与 JsonNode 进行转换。

四.Java 对象与 Json 字符串的转换

方法说明
String writeValueAsString(Object value)1、用于将任何 Java 对象(如 POJO、List、Set、Map等)序列化为 json 字符串,如果对象中某个属性的值为 null,则默认也会序列化为 null;2、如果 value 为 null,返回序列化的结果也返回 null
byte[] writeValueAsBytes(Object value)将 java 对象序列化为字节数组
writeValue(File resultFile, Object value)将 java 对象序列化并输出指定文件中
writeValue(OutputStream out, Object value)将 java 对象序列化并输出到指定字节输出流中
T readValue(String content, Class valueType)1、从给定的 JSON 字符串反序列化为 Java 对象;2、content 为空或者为 null,都会报错;3、valueType 表示反序列化的结果对象,可以是任何 java 对象,比如 POJO、List、Set、Map 等等.
T readValue(byte[] src, Class valueType)将 json 内容的字节数组反序列化为 java 对象
T readValue(File src, Class valueType)将本地 json 内容的文件反序列化为 java 对象
T readValue(InputStream src, Class valueType)将 json 内容的字节输入流反序列化为 java 对象
T readValue(Reader src, Class valueType)将 json 内容的字符输入流反序列化为 java 对象
T readValue(URL src, Class valueType)通过网络 url 地址将 json 内容反序列化为 java 对象

五.Json 字符串内容反序列化为 Json 节点对象

在这里插入图片描述

六.Java 对象与 Json 节点对象的转换

在这里插入图片描述

七.JsonNode 树模型 Json 节点

1.JsonNode 表示 json 节点,整个节点模型的根接口为 TreeNode,json 节点主要用于手动构建 json 对象。

2.JsonNode 有各种数据类型的实现类,其中最常用的就是 ObjectNode 与 ArrayNode,前者表示 json 对象,后者表示 json 对象数组。

3.json 节点对象可以通过 JsonNodeFactory 创建,如 JsonNodeFactory.instance.objectNode();

八.JsonNode json节点通用方法

在这里插入图片描述

九.Json 属性的值转为 java 数据类型

在这里插入图片描述
在这里插入图片描述

十.ObjectNode 对象节点常用方法

在这里插入图片描述

十一.替换与删除元素

在这里插入图片描述

十二.ArrayNode 数组节点常用方法

在这里插入图片描述

十三.Jsonson 注解设置 POJO 属性

1.ObjectMapper 序列化 POJO 对象为 json 字符串时,Date 日期类型默认会转为 long 长整型,json 字符串反序列化为 POJO 时自动将长整型的日期转为 Date 类型。

2.Map 对象序列化为 json 字符串时,Map 中的日期值也会默认转为 long 长整型, ObjectMapper.readValue(String content, Class valueType):反序列化为 Map 对象时,长整型的日期仍旧是长整型,不会转回 Date。ObjectMapper.readTree(String content) 反序列化为 json 节点时,原来 Map 中的长整型的日期也会是长整型。

3.JsonNode 节点对象 put 数据时,有 8 种基本数据类型以及 String、BigDecimal、BigInteger,但是没有 Date 类型,所以日期类型只能通过 Long 长整型设置,但是转 POJO 对象时仍然会自动转为 Date 类型。

4.Google 的 gson 默认不会序列化对象中值为 null 的字段,而 jackson 则不管值是否为 null,都会序列化。

5.@JsonFormat 注解加到指定对象的属性上可以指定日期序列化的格式。

6.JsonInclude(JsonInclude.Include.NON_NULL) 添加到 POJO 对象上,表示对值为 null 的属性不进行序列化。


http://chatgpt.dhexx.cn/article/5xS7dyHr.shtml

相关文章

Jackson 工具类使用及配置指南

目录 前言Jackson使用工具类Jackson配置属性Jackson解析JSON数据Jackson序列化Java对象 前言 Json数据格式这两年发展的很快&#xff0c;其声称相对XML格式有很对好处&#xff1a; 容易阅读&#xff1b;解析速度快&#xff1b;占用空间更少。 不过&#xff0c;JSON 和 XML…

docker 命令(2) 容器数据持久化

1. docker ps 查看所有运行状态的容器. 2.docker ps -a 查看全部状态的容器列表。 3. docker rmi image名字 删除一个镜像。 4.容器持久化&#xff1a; 这样的话容器即使删了 但是数据依然在 主机的目录未指定的话 默认就会给你建一个 docker run --name mysql_pro -p 330…

jprofiler 连接 docker中的jvm

jprofiler 官网&#xff1a; Java Profiler - JProfiler 1: docker-compose 指定端口&#xff0c; docker 为 -p 指定端口 2&#xff1a;官网下载 liunx版本及windows版本&#xff1a; 我用的是12.0.4 windows本地 win10安装 liunx 版本 上传是liun服务器 3&#xff1a; 在…

Java中Jackson库操作json的基本操作

这段工作中总会遇到使用Java处理JSON的情况&#xff0c;大部分都使用的是开源工具Jackson实现的。因此总结一下发上来&#xff0c;希望对看到的人有所帮助。 上一篇文档中&#xff0c;我已经讲过Java如何使用Jackson来对Json进行序列化&#xff0c;这边我再稍微回顾一下。 Ja…

java操作k8s api示例:通过java完成对kubenetes原生资源对象(pod、node、namespace、servcie、deployment)和自定义资源对象CRD的增删改查或事件监听

本文目标 基于官方kubernetes-client/java类库&#xff0c;实现通过java完成对kubenetes原生资源对象&#xff08;pod、node、namespace、servcie、deployment&#xff09;和自定义资源对象&#xff08;如&#xff1a;cluster&#xff09;的增删改查或事件监听&#xff08;wat…

Jackson注解 @JsonCreator

当json在反序列化时&#xff0c;默认选择类的无参构造函数创建类对象&#xff0c;当没有无参构造函数时会报错&#xff0c;JsonCreator作用就是指定反序列化时用的无参构造函数。构造方法的参数前面需要加上JsonProperty,否则会报错。 JsonCreatorpublic Person(JsonProperty(&…

Spring中读取本地json文件,并交给Spring容器管理

我们经常在项目开发中遇到项目数据初始化的问题&#xff0c;例如一些超管&#xff0c;管理员账号&#xff1b;或者地图包&#xff0c;电话号码包&#xff0c;之类的东西。放到到一个json文件里面&#xff08;大的数据字典包可以放到搜索引擎里面&#xff0c;改情况本文不做讨论…

导入jackson-databind依赖后tomcat报错Cannot resolve com.fasterxml.jackson.core:jackson-databind

1》解决步骤&#xff1a; 项目启动前先打开tomcat里面的conf里面的catalina.properties文件夹 如&#xff1a;apache-tomcat-8.5.83\conf\catalina.properties 后面在里面找到如下&#xff1a;红线处 往下找到如下&#xff1a; 将上面的 红波浪线内容添加到后面&#xff1a…

通过Kettle工具解析Json接口数据并且保存到数据库中的详细操作

最近接到一个业务需求&#xff0c;要把一个Json接口数据获取下来并且保存到数据库中&#xff0c;考虑到应用代码实现功能需要耗费一定时间和精力&#xff0c;一旦需要修改&#xff0c;就得重启项目等。于是就选择利用Kettle工具来实现这个业务功能&#xff0c;将其从项目源码中…

树莓派安装wiringpi显示不存在解决方法

环境&#xff1a;树莓派4B 使用sudo apt-get install wiringpi 指令安装wiringpi包时&#xff0c;出现下面的提示&#xff1a; Reading package lists... Done Building dependency tree... Done Reading state information... Done Package wiringpi is not available, but …

[ARM+Linux] 基于wiringPi库的串口通信

wiringOP-master/examples/serialTest.c中&#xff0c;wiringPi库中自带的串口程序&#xff1a; #include <stdio.h> #include <string.h> #include <errno.h>#include <wiringPi.h> #include <wiringSerial.h>int main () {int fd ;int count …

树莓派 Raspberry Pi —— wiringPi库安装

树莓派的GPIO可以像单片机&#xff08;51单片机&#xff0c;Arduino&#xff0c;STM32等&#xff09;一样进行IO控制&#xff08;输出高、低电平&#xff0c;IIC&#xff0c;SPI&#xff0c;串口通信&#xff0c;PWM输出等&#xff09;&#xff0c;在此使用常用的WiringPi库来进…

树莓派 wiringPi 库

wiringPi是一个很棒的树莓派IO控制库&#xff0c;使用C语言开发&#xff0c;提供了丰富的接口&#xff1a;GPIO控制&#xff0c;中断&#xff0c;多线程&#xff0c;等等 检查树莓派是否已安装 wiringPi&#xff0c;在树莓派终端输入&#xff1a; gpio -v // 会在终端中输出…

树莓派安装wiringPi

在学习微雪的2-CH CAN FD HAT时&#xff0c;根据官网步骤在树莓派安装wiringPi sudo apt-get install wiringpi #对于树莓派4B可能需要进行升级&#xff1a; wget https://project-downloads.drogon.net/wiringpi-latest.deb&#xff08;此链接安装可能出错&#xff0c;如果出…

解决wiringPi库与64位树莓派之间不兼容的问题

目录 一.问题现象&#xff1a; 二.解决方案&#xff08;网站&#xff09;可以直接点这下载 一.问题现象&#xff1a; 今天在练习wiringPi库的使用时候&#xff0c;在最后编译的时候出现了这个问题 主要问题是这个skipping incompatible&#xff01; skipping incompatible. …

树莓派安装WiringPi以及找不到wiringPi.h文件解决方法(图文教程)

目录 安装WiringPi 失败的过程&#xff1a; 选择的方法&#xff1a; 安装步骤&#xff1a; 找不到wiringPi.h文件解决方法 失败过程&#xff1a; 解决方法&#xff1a; 安装WiringPi 失败的过程&#xff1a; 通过分别使用sudo apt-get install wiringPi 和 wget https…

树莓派的wiringPi库

一、wiringPi库 树莓派的外设开发都是基于wiringPi库&#xff0c;wiringPi是树莓派IO控制库&#xff0c;使用C语言开发&#xff0c;提供了丰富的接口&#xff1a;GPIO控制&#xff0c;中断&#xff0c;多线程&#xff0c;等等。 wiringPi库的安装 进入 wiringPi的github (htt…

玩转树莓派三、树莓派安装GPIO库接口wiringpi

WiringPi简介 WiringPi 是由 Gordon Henderson 使用 C 语言编写的一个基于 PIN接口的 GPIO 控制函数库&#xff0c;适用于所有Raspberry Pi 中使用的 BCM2835、BCM2836 和 BCM2837 SoC 设备&#xff0c;使用过 Arduino 控制板的开发人员应该会对此非常熟悉。 wiringPi 包括一…

树莓派学习笔记——wiringPi I2C设备使用详解

1.前言 最近认真学习了树莓派&#xff0c;从浅到深认真分析了wiringPi实现代码&#xff0c;借助树莓派学习linux收获颇丰。深入学习linux一段时间后发现它非常有魅力&#xff0c;一个简单的IO口输出操作尽有那么多的“玩法”。wiringPi是一个简单易用的函数库&#xff0c;通过w…

wiringPi简介、安装和管脚说明,官方document

https://www.cnblogs.com/lulipro/p/5992172.html WiringPi API 教程 https://www.rubydoc.info/gems/wiringpi2/2.0.1/WiringPi/GPIO 硬件初始化函数 使用wiringPi时&#xff0c;你必须在执行任何操作前初始化树莓派&#xff0c;否则程序不能正常工作。 可以调用下表函数…