Jackson知识点记录

news/2024/12/23 1:16:30/

文章目录

  • 一.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. 序列化示例
java">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. 反序列化示例
java">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 处理示例
java">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。
java">objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
  • 自定义属性名:使用注解@JsonProperty来定义JSON属性名。
java">public class Person {private String name;@JsonProperty("person_age")private int age;// Constructors, getters and setters...
}
  • 包含和排除属性:使用@JsonIgnore注解来忽略某些属性,或者配置ObjectMapper只包含非空属性。
java">objectMapper.setSerializationInclusion(Include.NON_NULL);
  • 自定义序列化器和反序列化器:为特定类型创建自定义序列化器或反序列化器。
java">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.ppmy.cn/news/1429150.html

相关文章

Cjson 库使用

1. JSON简介 JSON全称 JavaScript Object Notation,即 JS对象简谱,是一种轻量级的数据格式。 它采用完全独立于编程语言的文本格式来存储和表示数据,语法简洁、层次结构清晰,易于人阅读和编写,同时也易于机器解析和生成…

耀斑层-如何在Unity中实现耀斑亮光效果

在Unity中实现耀斑亮光效果可以通过以下步骤来实现: 创建一个空物体作为光源:在场景中创建一个空物体,并将其放置在需要发出耀斑亮光效果的位置上。 添加光源组件:选中空物体,在Inspector面板中点击"Add Compone…

利用Django中的缓存系统提升Web应用性能

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在构建现代Web应用时,性能通常是至关重要的考虑因素之一。为了提高用户体验和应…

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第九套

华为 2024 届实习校园招聘-硬件通⽤/单板开发——第九套 部分题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正,仅供参考)(共十套)获取(WX:didadidadidida313&#xff0c…

视频教程下载:用ChatGPT的 API 开发AI应用指南

通过这门关于 OpenAI API 和 ChatGPT API 的全面课程,在您的应用中释放人工智能的力量。随着人工智能技术的快速发展,比以往任何时候都更重要的是保持领先地位,并为您的项目利用这些尖端工具。在本课程中,您将深入了解人工智能驱动…

云服务器安装docker环境

文章目录 1. Docker安装2. Portainer安装 可以使用termins连接服务器 1. Docker安装 查看系统的内核版本: uname -ryum 更新到最新版本 sudo yum update看到显示 Complete 就代表完成了,整个过程需要 5-10 分钟左右 安装Docker所需的依赖包 sudo yum…

云原生Kubernetes: K8S 1.29版本 部署ingress-nginx

目录 一、实验 1.环境 2. K8S 1.29版本 部署ingress-nginx 二、问题 1.kubectl 如何强制删除 Pod、Namespace 资源 2.创建pod失败 3.pod报错ImagePullBackOff 4.docker如何将镜像上传到官方仓库 5.创建ingress报错 一、实验 1.环境 (1)主机 表…

Python 全栈安全(四)

原文:annas-archive.org/md5/712ab41a4ed6036d0e8214d788514d6b 译者:飞龙 协议:CC BY-NC-SA 4.0 第十五章:内容安全策略 本章涵盖 使用 fetch、navigation 和 document 指令编写内容安全策略 使用 django-csp 部署 CSP 使用报…