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

深入了解 Java 中的 Jackson for JSON:了解 JsonNode、ArrayNode 和 ObjectMapper

Linda Hamilton
Linda Hamilton原创
2024-10-22 22:25:03829浏览

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