当前位置: 首页 > news >正文

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

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

准备工作

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

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

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

<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 的代码,示例代码如下:

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 数据。

ObjectMapper jsonMapper = new ObjectMapper();
JsonNode jsonNode = jsonMapper.readTree(new File(jsonFilePath));
3. 配置 SnakeYAML

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

DumperOptions dumperOptions = new DumperOptions();
dumperOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
Yaml yaml = new Yaml(dumperOptions);
4. 转换为 YAML

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

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

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

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

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • python并发与并行(四) ———— 用queue来协调多个线程之间的工作进度
  • 【Qt】基于VTK9.1+VS2019+Qt5.15.2的点云可视化程序开发
  • 【C++ Primer Plus习题】6.9
  • Elasticsearch(面试篇)
  • 第三十九篇-TeslaP40+CosyVoice-安装
  • 云计算实训38——docker网络、跨主机容器之间的通讯
  • STM32(F103ZET6)第十九课:FreeRtos的移植和使用
  • SQLserver使用sql语句创建主键,外键,唯一约束,自增
  • CSS中的元素布局与定位详细说明
  • # 移动硬盘误操作制作为启动盘数据恢复问题
  • Android插件化技术之加载未安装APK
  • 数据链路层(Mac帧,报头字段,局域网通信原理),MTU,MSS,ip报文的分包与组装(ip报头字段介绍,组装过程,判断是否被分片/收到全部分片)
  • 【LeetCode面试150】——54螺旋矩阵
  • Codeforces 1304C - Air Conditioner(1500)
  • MYSQL 优化
  • #Java异常处理
  • ES6简单总结(搭配简单的讲解和小案例)
  • Hexo+码云+git快速搭建免费的静态Blog
  • Java基本数据类型之Number
  • opencv python Meanshift 和 Camshift
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Redis中的lru算法实现
  • vue 个人积累(使用工具,组件)
  • Webpack 4 学习01(基础配置)
  • 初识MongoDB分片
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 第2章 网络文档
  • 飞驰在Mesos的涡轮引擎上
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 经典排序算法及其 Java 实现
  • 两列自适应布局方案整理
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过git安装npm私有模块
  • 小程序开发之路(一)
  • 移动端唤起键盘时取消position:fixed定位
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 从如何停掉 Promise 链说起
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • #if 1...#endif
  • #pragma pack(1)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干
  • (4)Elastix图像配准:3D图像
  • (pojstep1.1.2)2654(直叙式模拟)
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (附源码)计算机毕业设计大学生兼职系统
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net refrector
  • .NET6 命令行启动及发布单个Exe文件