搜索
首页Javajava教程深入了解 Java 中的 Jackson for JSON:了解 JsonNode、ArrayNode 和 ObjectMapper

Dive into Jackson for JSON in Java: Understanding JsonNode, ArrayNode, and ObjectMapper

嘿,Java 开发者们! ?

曾经发现自己盯着 JSON 数据并思考,“我到底如何在 Java 中使用它?”别担心 - 你并不孤单!无论是构建 API、使用 API 还是只是处理数据,处理 JSON 几乎是不可避免的。但好消息是:杰克逊支持你!

在本文中,我将向您介绍一些 Jackson 基础知识,例如 JsonNode、ArrayNode 和 ObjectMapper。我们将保持简单,通过简单的代码示例和输出向您展示事情是如何工作的。

听起来不错吗?让我们深入了解吧! ?

在 Spring Boot 项目中设置 Jackson

在深入研究示例之前,让我们快速介绍一下如何在 Spring Boot 项目中设置 Jackson。好消息:Spring Boot 内置了 Jackson,因此只需最少的设置。 ?

当您创建新的 Spring Boot 项目时,Jackson 将作为用于序列化和反序列化的默认 JSON 库。如果您想显式添加 Jackson,请确保您的 pom.xml 中包含以下依赖项:

<dependency>
    <groupid>com.fasterxml.jackson.core</groupid>
    <artifactid>jackson-databind</artifactid>
    <version>2.18.0</version> <!-- You can use the latest version -->
</dependency>

这将添加 Jackson 的核心功能,包括用于 JSON 处理的 ObjectMapper。

奖励:Spring Boot 配置
Spring Boot 为 Jackson 提供了开箱即用的设置,但您也可以通过 application.properties 或 application.yml 文件对其进行自定义。

例如,要配置 JSON 的漂亮打印,您可以添加:

spring.jackson.serialization.indent_output=true

或者在application.yml中:

spring:
  jackson:
    serialization:
      indent_output: true

现在,每当您的 Spring Boot 应用程序序列化 JSON 时,它都会被很好地格式化!

完成此设置后,您就可以使用 Jackson 在 Spring Boot 应用程序中使用 JSON。

那么,杰克逊是什么?

Jackson 就像一把在 Java 中处理 JSON 的瑞士军刀。您可以用它来:

  • 1.将 Java 对象转换为 JSON(序列化)。
  • 2.将 JSON 转换为 Java 对象(反序列化)。
  • 3.使用 JsonNode 以树状结构处理 JSON。

今天我们将探索其中一些功能,所以准备好让 JSON 处理感觉不那么可怕!

JsonNode:您迈入 JSON 的第一步

将 JsonNode 视为一把神奇的钥匙,可让您探索和操作 JSON 数据。它是一种用 Java 表示 JSON 结构不同部分的方法。

想象一下您有这个简单的 JSON 数据:

{
  "name": "Samarth",
  "age": 30,
  "city": "New York"
}

如何用 Java 阅读此内容?让我们看看吧!

代码如下:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonNodeExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"Samarth\", \"age\":30, \"city\":\"New York\"}";

        // Step 1: Create an ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();

        // Step 2: Parse the JSON string into a JsonNode
        JsonNode jsonNode = objectMapper.readTree(jsonString);

        // Step 3: Access values from the JsonNode
        System.out.println("Name: " + jsonNode.get("name").asText());
        System.out.println("Age: " + jsonNode.get("age").asInt());
        System.out.println("City: " + jsonNode.get("city").asText());
    }
}

输出:

<dependency>
    <groupid>com.fasterxml.jackson.core</groupid>
    <artifactid>jackson-databind</artifactid>
    <version>2.18.0</version> <!-- You can use the latest version -->
</dependency>

这里发生了什么事?

  1. ObjectMapper 是 Jackson 的主要帮手。它是 JSON 和 Java 之间的转换。
  2. readTree() 读取 JSON 并将其转换为 JsonNode 对象。
  3. 我们使用 .get() 来访问 JSON 中的各个字段 -“name”、“age”和“city”。

很酷,对吧?现在您开始看到在 Java 中使用 JSON 是多么容易!

ArrayNode:处理 JSON 数组

但是如果你的 JSON 是一个数组怎么办?别担心,杰克逊也能解决这个问题!假设您有这个 JSON 数组:

spring.jackson.serialization.indent_output=true

我们可以使用 ArrayNode 来读取和处理这个对象数组。

代码如下:

spring:
  jackson:
    serialization:
      indent_output: true

输出:

{
  "name": "Samarth",
  "age": 30,
  "city": "New York"
}

这里发生了什么事?

  1. **ArrayNode **是一种特殊类型的 **JsonNode **,表示 JSON 对象数组。
  2. 我们循环遍历数组中的每个元素并打印出每个人的“名字”。

简单吧?借助 ArrayNode,Jackson 使处理 JSON 数组变得轻而易举!

ObjectMapper:杰克逊的核心

现在,我们来谈谈ObjectMapper - Jackson 的核心和灵魂。它是将 Java 对象转换为 JSON 的首选工具,反之亦然。

将 Java 对象序列化为 JSON
序列化只是一种奇特的说法,“将我的 Java 对象转换为 JSON 字符串”。假设您有一个简单的 Person 类:

代码:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JsonNodeExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\":\"Samarth\", \"age\":30, \"city\":\"New York\"}";

        // Step 1: Create an ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();

        // Step 2: Parse the JSON string into a JsonNode
        JsonNode jsonNode = objectMapper.readTree(jsonString);

        // Step 3: Access values from the JsonNode
        System.out.println("Name: " + jsonNode.get("name").asText());
        System.out.println("Age: " + jsonNode.get("age").asInt());
        System.out.println("City: " + jsonNode.get("city").asText());
    }
}

输出:

Name: Samarth  
Age: 30  
City: New York

这里发生了什么事?

  1. **ObjectMapper **获取 Person 对象并使用 writeValueAsString() 将其转换为 JSON 字符串。
  2. writeValueAsString() 方法创建 Java 对象的 JSON 表示形式。
  3. 结果是一个有效的 JSON 字符串,您可以发送到 API 或存储在数据库中。

将 JSON 反序列化为 Java 对象

反之亦然!您可以获取 JSON 并将其转换回 Java 对象。这称为反序列化

代码如下:

[
  {"name": "Samarth"},
  {"name": "Ujjwal"},
  {"name": "Gaurav"}
]

输出:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;

public class ArrayNodeExample {
    public static void main(String[] args) throws Exception {
        String jsonArrayString = "[{\"name\":\"Samarth\"}, {\"name\":\"Ujjwal\"}, {\"name\":\"Gaurav\"}]";

        // Step 1: Create an ObjectMapper
        ObjectMapper objectMapper = new ObjectMapper();

        // Step 2: Parse the JSON array into an ArrayNode
        ArrayNode arrayNode = (ArrayNode) objectMapper.readTree(jsonArrayString);

        // Step 3: Loop through each element in the array
        for (JsonNode jsonNode : arrayNode) {
            System.out.println("Name: " + jsonNode.get("name").asText());
        }
    }
}

这里发生了什么事?

我们再次使用 **ObjectMapper **,但这次它读取 JSON 字符串并将其转换回 Person 对象。
这是使用 readValue() 完成的,结果是一个完整的 Java 对象,可以在您的代码中使用。

总结

就是这样!我们已经涵盖了很多内容:

  • JsonNode:如何读取和操作 JSON 数据。
  • ArrayNode:如何处理 JSON 数组。
  • ObjectMapper:如何在 Java 对象与 JSON 之间进行序列化和反序列化。

我希望本指南能让 Jackson 不再那么令人生畏,并且使用起来更加有趣!一旦掌握了窍门,您很快就能像专业人士一样处理 JSON。

但是嘿,不要停在这里!请留意我的下一篇文章,我们将深入探讨更高级的 Jackson 功能和实际应用程序的最佳实践。

下次见!快乐编码! ?

以上是深入了解 Java 中的 Jackson for JSON:了解 JsonNode、ArrayNode 和 ObjectMapper的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?如何将Maven或Gradle用于高级Java项目管理,构建自动化和依赖性解决方案?Mar 17, 2025 pm 05:46 PM

本文讨论了使用Maven和Gradle进行Java项目管理,构建自动化和依赖性解决方案,以比较其方法和优化策略。

如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?如何使用适当的版本控制和依赖项管理创建和使用自定义Java库(JAR文件)?Mar 17, 2025 pm 05:45 PM

本文使用Maven和Gradle之类的工具讨论了具有适当的版本控制和依赖关系管理的自定义Java库(JAR文件)的创建和使用。

如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?如何使用咖啡因或Guava Cache等库在Java应用程序中实现多层缓存?Mar 17, 2025 pm 05:44 PM

本文讨论了使用咖啡因和Guava缓存在Java中实施多层缓存以提高应用程序性能。它涵盖设置,集成和绩效优势,以及配置和驱逐政策管理最佳PRA

如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?如何将JPA(Java持久性API)用于具有高级功能(例如缓存和懒惰加载)的对象相关映射?Mar 17, 2025 pm 05:43 PM

本文讨论了使用JPA进行对象相关映射,并具有高级功能,例如缓存和懒惰加载。它涵盖了设置,实体映射和优化性能的最佳实践,同时突出潜在的陷阱。[159个字符]

Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Java的类负载机制如何起作用,包括不同的类载荷及其委托模型?Mar 17, 2025 pm 05:35 PM

Java的类上载涉及使用带有引导,扩展程序和应用程序类负载器的分层系统加载,链接和初始化类。父代授权模型确保首先加载核心类别,从而影响自定义类LOA

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用