如何使用 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,过程简单高效。你可以根据实际项目的需求,对代码进行适当的优化和扩展。

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

相关推荐
计算机学姐20 分钟前
基于微信小程序的食堂点餐预约管理系统
java·vue.js·spring boot·mysql·微信小程序·小程序·mybatis
骆晨学长25 分钟前
基于springboot学生健康管理系统的设计与实现
java·开发语言·spring boot·后端·spring
骆晨学长25 分钟前
基于Springboot的医疗健康助手开题报告
java·spring boot·后端
二十雨辰25 分钟前
[苍穹外卖]-09Spring Task定时任务
java·数据库·spring
我是小酒26 分钟前
掌握 Spring:从新手到高手的常见问题汇总
java·后端·spring·springboot
A懿轩A39 分钟前
MySQL SQL多表查询语句各种连接
java·开发语言·数据库·sql·mysql·mybatis
代码代码快快显灵1 小时前
XML标记语言
xml·java·数据库
DKPT1 小时前
数据结构之排序的基本概念
java·数据结构·笔记·学习·算法
MessiGo1 小时前
Python 入门教程(3)基础知识 | 3.3、标识符
java·开发语言·python
二十雨辰1 小时前
[Java]maven从入门到进阶
java·开发语言·maven