如何使用 Java 将 JSON 数据转换为 YAML 文件

在日常开发中,我们常常会遇到需要将数据在不同格式之间进行转换的需求。今天我们就来学习如何使用 Java 将 JSON 格式的数据转换为 YAML 格式。为此,我们会使用 Jackson 和 SnakeYAML 这两个库。本文将详细介绍代码的实现和具体步骤。

准备工作

首先,我们需要在项目中引入以下两个依赖:

  1. Jackson:用于解析和处理 JSON 数据。
  2. SnakeYAML:用于生成和处理 YAML 数据。

可以通过 Maven 或 Gradle 来添加这些依赖项。以下是 Maven 的依赖项:

xml 复制代码
<dependencies>
    <!-- Jackson 核心库 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.0</version>
    </dependency>

    <!-- SnakeYAML 库 -->
    <dependency>
        <groupId>org.yaml</groupId>
        <artifactId>snakeyaml</artifactId>
        <version>1.29</version>
    </dependency>
</dependencies>
编写代码

现在我们来编写将 JSON 数据转换为 YAML 的代码,示例代码如下:

java 复制代码
package com.gzyz.yz.test;

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class JsonToYamlConverter {

    public static void main(String[] args) {
        // JSON 文件路径
        String jsonFilePath = "C:\\Users\\yz\\Desktop\\googleBookmarks\\bookmarks.json";
        // 输出 YAML 文件路径
        String yamlFilePath = "C:\\Users\\yz\\Desktop\\googleBookmarks\\bookmarks.yml";

        try {
            // 创建 Jackson 的 ObjectMapper 实例,用于读取 JSON 文件
            ObjectMapper jsonMapper = new ObjectMapper();
            // 读取 JSON 文件内容到 JsonNode 对象
            JsonNode jsonNode = jsonMapper.readTree(new File(jsonFilePath));

            // 设置 YAML 输出选项
            DumperOptions dumperOptions = new DumperOptions();
            // 设置 YAML 的输出样式为块样式(更易读)
            dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
            // 创建 SnakeYAML 的 Yaml 实例
            Yaml yaml = new Yaml(dumperOptions);

            // 将 JsonNode 对象转换为 Java 对象,并将其转为 YAML 格式的字符串
            String yamlString = yaml.dump(jsonMapper.convertValue(jsonNode, Object.class));

            // 将 YAML 字符串写入到指定的 YAML 文件中
            try (FileWriter fileWriter = new FileWriter(yamlFilePath)) {
                fileWriter.write(yamlString);
            }

            System.out.println("JSON 数据已成功转换为 YAML 文件, 路径: " + yamlFilePath);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
代码解析
1. JSON 文件路径

我们需要先指定输入的 JSON 文件路径(jsonFilePath)和输出的 YAML 文件路径(yamlFilePath)。这里我们假设 JSON 文件存放在桌面上。

2. Jackson 解析 JSON

我们使用 Jackson 的 ObjectMapper 类来读取 JSON 文件,并将其内容转换为 JsonNode 对象。JsonNode 是一个树形结构,可以表示任意复杂的 JSON 数据。

java 复制代码
ObjectMapper jsonMapper = new ObjectMapper();
JsonNode jsonNode = jsonMapper.readTree(new File(jsonFilePath));
3. 配置 SnakeYAML

接着我们需要配置 SnakeYAML 的输出格式。在此例中,我们设置 YAML 的输出样式为块样式(BLOCK),这使得生成的 YAML 文件更加易读。

java 复制代码
DumperOptions dumperOptions = new DumperOptions();
dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
Yaml yaml = new Yaml(dumperOptions);
4. 转换为 YAML

使用 yaml.dump 方法将 JsonNode 对象转为 YAML 字符串。由于 JsonNode 并不是一个普通的 Java 对象,因此我们需要先将其转换为 Object,再传递给 SnakeYAML。

java 复制代码
String yamlString = yaml.dump(jsonMapper.convertValue(jsonNode, Object.class));
5. 写入 YAML 文件

最后,我们将生成的 YAML 数据写入到指定的文件中。

java 复制代码
try (FileWriter fileWriter = new FileWriter(yamlFilePath)) {
    fileWriter.write(yamlString);
}
运行效果

运行上述代码后,JSON 文件中的数据会被转换为 YAML 格式并保存到指定路径的文件中。你可以在输出中看到成功转换的提示:

复制代码
JSON 数据已成功转换为 YAML 文件, 路径: C:\Users\yz\Desktop\googleBookmarks\bookmarks.yml
总结

通过本文,我们学习了如何使用 Java 中的 Jackson 和 SnakeYAML 库将 JSON 数据转换为 YAML 数据。使用 Jackson 解析 JSON 数据,再结合 SnakeYAML 来生成 YAML,过程简单高效。你可以根据实际项目的需求,对代码进行适当的优化和扩展。

希望这篇文章对你有所帮助!

相关推荐
戴西软件42 分钟前
戴西软件入选2026年安徽省制造业数智化转型服务商名单
java·大数据·服务器·前端·人工智能
爱棋笑谦43 分钟前
springboot—数据源相关配置
java·spring boot·spring
budingxiaomoli9 小时前
Spring IoC &DI
java·spring·ioc·di
Spider Cat 蜘蛛猫9 小时前
Springboot SSO系统设计文档
java·spring boot·后端
未若君雅裁9 小时前
MySQL高可用与扩展-主从复制读写分离分库分表
java·数据库·mysql
学习中.........9 小时前
从扰动函数的变化,感受红黑树带来的性能提升
java
计算机安禾10 小时前
【c++面向对象编程】第24篇:类型转换运算符:自定义隐式转换与explicit
java·c++·算法
weixin1997010801610 小时前
【保姆级教程】淘宝/天猫商品详情 API(item_get)接入指南:Python/Java/PHP 调用示例与 JSON 返回值解析
java·python·php
环流_11 小时前
redis核心数据类型在java中的操作
java·数据库·redis
雨辰AI11 小时前
SpringBoot3 项目国产化改造完整流程|从 MySQL 到人大金仓落地
java·数据库·后端·mysql·政务