Jackson知识点记录

文章目录

  • 一.Jackson
      • 模块说明
  • 二.ObjectMapper
      • 基本功能
      • 使用`ObjectMapper`的一些核心方法:
      • 示例代码
        • 1. 序列化示例
        • 2. 反序列化示例
        • 3. `JsonNode` 处理示例
      • 高级配置
  • 三.各种Node
      • 1. `ObjectNode`
      • 2. `ArrayNode`
      • 3. `ValueNode`
      • 4. `MissingNode`
      • 示例

一.Jackson

Jackson 库主要分为三个核心模块:jackson-corejackson-annotations,和 jackson-databind

模块说明

  1. jackson-core:

    • 提供了Jackson的核心功能,包括基础的读写API(JsonParserJsonGenerator),以及JSON处理的低级实现。
  2. jackson-annotations:

    • 包含了用于配置Jackson数据绑定行为的注解。这些注解通常用于指定如何将Java对象序列化为JSON,或者如何从JSON反序列化为Java对象。
  3. jackson-databind:

    • 提供了高级数据绑定支持,依赖于jackson-core提供的API和jackson-annotations定义的配置注解。它允许直接将JSON转换成Java对象(反序列化)或将Java对象转换成JSON(序列化)。
      在这里插入图片描述

二.ObjectMapper

基本功能

  1. 序列化: 将Java对象转换为JSON字符串。
  2. 反序列化: 将JSON字符串转换为Java对象。
  3. 数据绑定: 支持从各种数据源生成和消耗JSON,包括从文件、URL或字符串。
  4. 流式API: 提供了一种流式生成JSON和解析JSON的方法。

使用ObjectMapper的一些核心方法:

  • writeValue(AsXxx): 用于将对象序列化为JSON,可输出至文件、输出流或者字符串。
  • readValue: 用于将JSON字符串、文件或输入流解析为Java对象。
  • convertValue: 用于转换不同的数据类型,例如从一种Java对象转换为另一种。
  • readTree: 读取JSON内容至一个JsonNode树模型,这在灵活处理JSON数据时非常有用。

示例代码

1. 序列化示例
ObjectMapper objectMapper = new ObjectMapper();Person person = new Person("John Doe", 28);
try {String json = objectMapper.writeValueAsString(person);System.out.println(json);
} catch (IOException e) {e.printStackTrace();
}
2. 反序列化示例
String json = "{\"name\":\"John Doe\",\"age\":28}";try {Person person = objectMapper.readValue(json, Person.class);System.out.println(person.getName());
} catch (IOException e) {e.printStackTrace();
}
3. JsonNode 处理示例
String jsonData = "{\"name\":\"Jane Doe\",\"age\":25}";try {JsonNode node = objectMapper.readTree(jsonData);String name = node.get("name").asText();int age = node.get("age").asInt();System.out.println("Name: " + name + ", Age: " + age);
} catch (IOException e) {e.printStackTrace();
}

高级配置

ObjectMapper 提供了丰富的配置选项来调整其行为,例如:

  • 配置序列化和反序列化的行为:可以通过启用或禁用SerializationFeatureDeserializationFeature枚举中的特性来配置ObjectMapper的行为。例如,你可以禁用在序列化中将日期作为timestamps。
objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  • 自定义属性名:使用注解@JsonProperty来定义JSON属性名。
public class Person {private String name;@JsonProperty("person_age")private int age;// Constructors, getters and setters...
}
  • 包含和排除属性:使用@JsonIgnore注解来忽略某些属性,或者配置ObjectMapper只包含非空属性。
objectMapper.setSerializationInclusion(Include.NON_NULL);
  • 自定义序列化器和反序列化器:为特定类型创建自定义序列化器或反序列化器。
objectMapper.registerModule(new SimpleModule().addSerializer(new MyCustomSerializer()));

三.各种Node

在Jackson库中,JsonNode是一个重要的类,用于表示JSON数据的结构化形式。它是一个抽象的、不可变的数据类型,代表JSON数据的节点。以下是Jackson中主要的JsonNode类型,这些类型映射了JSON数据结构的不同组成部分:

1. ObjectNode

  • 表示JSON对象,即键值对的集合。
  • 可以通过键(字符串)访问值(JsonNode)。

2. ArrayNode

  • 表示JSON数组。
  • 提供对数组元素的索引访问,每个元素都是一个JsonNode

3. ValueNode

  • 是一个抽象类,表示JSON的值节点(非数组和非对象)。
  • ValueNode的子类包括:
    • TextualNode:表示JSON字符串。
    • NumericNode:表示JSON数字,具体实现包括IntNode, LongNode, DoubleNode等。
    • BooleanNode:表示JSON布尔值(truefalse)。
    • BinaryNode:表示二进制数据。
    • NullNode:表示JSON的null值。
    • POJONode:表示任何Java对象作为一个节点,通常不是标准JSON类型的一部分,但Jackson允许你将任何Java对象作为节点嵌入。

4. MissingNode

  • 代表缺失的节点。当访问不存在的字段时,通常返回此类型的节点而不是null
  • 这对于避免NullPointerException非常有用,并可以链式调用多个方法。

在Jackson的JsonNode类中,asXXX()方法系列主要用于从不同类型的ValueNode中安全地提取数据(__value)。这些方法会尝试将节点的值转换为请求的类型,如果节点值不是期望的类型或节点为空,则返回一个默认值(例如,asInt()对于非数值或null节点会返回0)。

示例

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试:算法常用面试题汇总

1.说一下什么是二分法?使用二分法时需要注意什么?如何用代码实现? 二分法查找(Binary Search)也称折半查找,是指当每次查询时,将数据分为前后两部分,再用中值和待搜索的值进行比较&…

螺栓拧紧角度如何检验?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺栓拧紧角度检验方法是确保螺栓连接紧固可靠的关键步骤之一。正确的拧紧角度可以确保螺栓的预紧力达到要求,防止松动和失效。下面将详细介绍螺栓拧紧角度检验的步骤和注意事项。 一、螺栓拧紧角度的重要性 …

component-Echarts柱状图堆叠图与折线图的实现

1.效果 2.​​​​​代码 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title>ECharts 实例</title><!-- 引入 echarts.js --><script src"https://cdn.staticfile.org/echarts/4.3.0/echarts.min.js&…

探索存内计算—基于 SRAM 的存内计算与基于 MRAM 的存算一体的探究

CSDN存内社区招募&#xff1a;https://bbs.csdn.net/forums/computinginmemory 首个存内计算开发者社区&#xff0c;现0门槛新人加入&#xff0c;发文享积分兑超值礼品&#xff1b; 存内计算先锋/大使在社区投稿&#xff0c;可获得双倍积分&#xff0c;以及社区精选流量推送&a…

sql篇-内连接-左连接-右连接

内连接&#xff1a;表1 inner join 表2 on 条件 inner join join&#xff08;简写&#xff09; 查找&#xff1a;满足 匹配两个表条件的记录&#xff1a;student.s_id s.s_id(不匹配的记录不筛选) select * from student inner join score s on student.s_id s.s_id; 查询…

找第三方软件测评多久能拿到报告

随着软件市场的快速发展&#xff0c;用户对软件质量、性能和安全性的要求也越来越高。为了满足这些需求&#xff0c;许多企业和开发者选择寻求第三方软件测评机构的帮助。那么&#xff0c;找第三方软件测评多久能拿到报告呢&#xff1f;本文将从多个方面为您解析这一问题。 一…

【C++核心】面向对象的三大特性

面向对象的三大特性 一、封装性1. 封装性的意义1.1 表现事物1.2 权限控制1.3 成员属性设置为私有 2. 封装性的衍生知识2.1 struct和class区别2.2 友元2.2.1 全局函数做友元2.2.2 类做友元2.2.3 成员函数做友元 二、继承性1. 继承的语法2. 继承方式3. 继承中的对象模型3.1 说明3…

鸿蒙Next和鸿蒙4.0开发者如何选择

目录 一、 开头一句话重点落在鸿蒙原生开发&#xff0c;也就是ArkUI、Ability、ArkTS、ArkWeb、ArkData等。不管将来是鸿蒙Next2.0或者鸿蒙6.0都游刃有余。 二、 鸿蒙4.0与鸿蒙Next的共性共性概述详细分析总结 三、HarmonyOS Next与HarmonyOS 4的主要区别内核与兼容性设备与应用…

智能电视/盒子长文字输入困难?手把手教您解决这个难题!(电视盒子跨屏输入/打字,亲测有效!)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 解决方案 📒📝 方法一📝 方法二🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在使用智能电视/电视盒子的时候,会遇到这样一个场景:需要输入一个很长的网址,或者是想要粘贴一段很长的文字。如何使用遥控器要完成…

sqli-labs-master(Less1--Less5)

Sql-labs-master通关攻略_sqli-labs-master 全部通关-CSDN博客 sqli-labs-master靶场搭建&#xff0c;1-10关详解-CSDN博客 小白勇闯sqli-labs-master1-22关_sqlilabs第22关-CSDN博客 搭建靶场 靶场&#xff1a; GitHub - Audi-1/sqli-labs: SQLI labs to test error base…

浅谈成为程序员后我明白的道理

当我成为程序员后&#xff0c;我明白了以下几点&#xff1a; 编程是一门持续学习的技能&#xff1a;作为程序员&#xff0c;我意识到编程是一个不断发展和变化的领域。新的编程语言、框架和技术不断出现&#xff0c;需要不断学习和适应。我意识到要持续学习新的知识和技能&…

机器学习—特征预处理和降维(四)

什么是特征预处理&#xff1f; 通过一些转换函数将特征数据转换成更加适合算法模型的特征数据过程 1包含内容 数值型数据的无量纲化&#xff1a; 归一化标准化 2特征预处理API sklearn. preprocessing为什么要进行归一化 or 标准化&#xff1f; 特征的单位或者大小相差较大…

学习了解大模型的四大缺陷

由中国人工智能学会主办的第十三届吴文俊人工智能科学技术奖颁奖典礼暨2023中国人工智能产业年会于2024年4月14日闭幕。 会上&#xff0c;中国工程院院士、同济大学校长郑庆华认为&#xff0c;大模型已经成为当前人工智能的巅峰&#xff0c;大模型之所以强&#xff0c;是依托了…

请警惕,这10本期刊已被SCI剔除,部分涉嫌灌水

科睿唯安于4月15日更新了SCIE、SSCI、AHCI、ESCI四大数据库最新收录期刊目录。 2024年第一版——2024年1月24日更新 2024年第二版——2024年2月19日更新 2024年第三版——2024年3月18日更新 2024年第四版——2024年4月15日更新 本次目录中共收录期刊23368本。 【SCIE数据…

苹果开发初学者指南:Xcode 如何为运行的 App 添加环境变量(Environmental Variable)

概览 Xcode 15 在运行 SwiftUI 代码时突然报告如下警告&#xff1a; Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API and this value is being ignored. Please fix this problem. 不仅如此…

react之useState详解

1. 为什么要用useState&#xff1f; 它是React 16.8 的新特性&#xff0c;我们在React里面一般都是用Class去写组件&#xff0c;但是有时候会发现不用它更方便&#xff0c;但是问题来了&#xff1a;不用Class的时候&#xff0c;数据的状态改变如何存储呢&#xff1f;如果你用 …

数据结构-堆详解

堆 图片&#xff1a; 二叉堆的父节点为这个子树的最值。 如何维护它。 我们发现它是一棵二叉树&#xff0c;那就自然满足若父节点为 x x x 则左儿子节点为 x 2 x\times2 x2 右儿子为 x 2 1 x\times 2 1 x21 这是显然的&#xff0c;但如果写成指针或结构体就太麻烦了&…

Redis的特性与安装

回顾 Redis是一个在内存中存储数据的中间件&#xff0c;可以用来当数据库用&#xff0c;也可以作为缓存用(这里的缓存往往是对数据库缓存)。 中间件&#xff1a;和业务无关的服务&#xff0c;功能更加通用&#xff0c;如&#xff1a;数据库&#xff0c;缓存&#xff0c;消息队…

【笔试强训】Day1 --- 数字统计 + 两个数组的交集 + 点击消除

文章目录 1. 数字统计2. 两个数组的交集3. 点击消除 1. 数字统计 【链接】&#xff1a;数字统计 解题思路&#xff1a;模拟&#xff0c;利用数学知识&#xff0c;计算每个数字中2出现的个数。&#xff08;这里也可以将数字转换成字符串来统计字符’2’出现的个数&#xff09…

如何使用Flask搭建web程序框架并实现无公网IP远程访问本地程序

文章目录 前言1. 安装部署Flask并制作SayHello问答界面2. 安装Cpolar内网穿透3. 配置Flask的问答界面公网访问地址4. 公网远程访问Flask的问答界面 前言 Flask是一个Python编写的Web微框架&#xff0c;让我们可以使用Python语言快速实现一个网站或Web服务&#xff0c;本期教程…