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

YAML-02-yml 配置文件 java 整合使用 yamlbeans + snakeyaml + jackson-dataformat-yaml

java 中处理 yml 的开源组件是什么?

在Java中处理YAML(YAML Ain't Markup Language)格式的开源组件有很多,其中一些比较常用的包括:

  1. SnakeYAML: SnakeYAML 是一个Java库,用于解析和生成YAML格式的数据。它支持YAML 1.1规范,并提供了一个简单易用的API,用于在Java应用程序中处理YAML数据。

    GitHub 地址:https://bitbucket.org/asomov/snakeyaml

    Maven依赖:

    <dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.29</version> 
    </dependency>
  2. Jackson YAML: Jackson是一个流行的Java JSON处理库,它也提供了对YAML格式的支持。Jackson YAML模块允许你在Java对象和YAML之间进行转换。

    GitHub 地址:https://github.com/FasterXML/jackson-dataformats-text

    Maven依赖:

    <dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId><version>2.13.0</version> 
    </dependency>
  3. YAMLBeans: YAMLBeans 是一个轻量级的Java库,用于将Java对象与YAML数据进行互相转换。它提供了简单的API,使得YAML数据的读写变得容易。

    GitHub 地址:https://github.com/EsotericSoftware/yamlbeans

    Maven依赖:

    <dependency><groupId>net.sourceforge.yamlbeans</groupId><artifactId>yamlbeans</artifactId><version>1.14</version> 
    </dependency>

这些开源库都提供了方便的方式来处理YAML格式的数据,你可以根据自己的需求选择其中一个进行使用。

对比表格

以下是SnakeYAML、Jackson YAML和YAMLBeans这三个Java中处理YAML格式的开源组件的对比表格:

特点SnakeYAMLJackson YAMLYAMLBeans
简单易用性易用,提供简洁的API易用,与Jackson库集成,熟悉Jackson的用户可以方便使用易用,提供简单的API
性能相对较慢较快,性能较高相对较慢
功能丰富性中等,支持基本的YAML 1.1规范高,支持丰富的特性,包括多文档处理、自定义类型等低,功能较为基础
扩展性中等,支持自定义标签和类型处理高,支持自定义序列化和反序列化逻辑低,较难扩展
与Java对象的绑定易用,支持Java对象与YAML数据的转换易用,通过Jackson库支持Java对象与YAML数据的转换易用,支持Java对象与YAML数据的转换
流行度和社区支持相对较高,有活跃的社区和用户群非常高,Jackson是非常流行的Java JSON处理库之一相对较低,较小的社区支持

选择使用哪个库取决于你的具体需求。如果你需要一个简单易用、轻量级的库,SnakeYAML是一个不错的选择。

如果你希望拥有更高的性能和丰富的特性,同时也需要支持JSON和其他数据格式,那么Jackson YAML是一个强大的工具。

如果你只需要基本的YAML处理功能,并且希望使用简单的API,YAMLBeans可以满足你的需求。

SnakeYAML

maven

<dependency><groupId>org.yaml</groupId><artifactId>snakeyaml</artifactId><version>1.29</version> 
</dependency>

入门

package com.github.houbb.yaml.test;import org.yaml.snakeyaml.Yaml;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class SnakeYAMLExample {public static void main(String[] args) throws IOException {// 定义一个Java对象Map<String, Object> data = new HashMap<>();data.put("name", "John Doe");data.put("age", 30);data.put("isEmployed", true);Map<String, Object> addressData = new HashMap<>();addressData.put("city", "New York");addressData.put("zip", "10001");data.put("address", addressData);// 将Java对象写入YAML文件try (FileWriter writer = new FileWriter("snakeyaml_output.yaml")) {Yaml yaml = new Yaml();yaml.dump(data, writer);System.out.println("YAML文件已生成。");} catch (IOException e) {e.printStackTrace();}// 从YAML文件中读取数据try (FileReader reader = new FileReader("snakeyaml_output.yaml")) {Yaml yaml = new Yaml();Map<String, Object> loadedData = yaml.load(reader);System.out.println("从YAML文件中读取的数据:" + loadedData);} catch (IOException e) {e.printStackTrace();}}
}

效果

address: {zip: '10001', city: New York}
name: John Doe
isEmployed: true
age: 30

Jackson YAML

maven

<dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId><version>2.13.0</version> 
</dependency>

java

package com.github.houbb.yaml.test;import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class JacksonYAMLExample {public static void main(String[] args) {// 定义一个Java对象Map<String, Object> data = new HashMap<>();data.put("name", "John Doe");data.put("age", 30);data.put("isEmployed", true);Map<String, Object> addressData = new HashMap<>();addressData.put("city", "New York");addressData.put("zip", "10001");data.put("address", addressData);// 将Java对象写入YAML文件try {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());objectMapper.writeValue(new File("JacksonYAML_output.yaml"), data);System.out.println("YAML文件已生成。");} catch (IOException e) {e.printStackTrace();}// 从YAML文件中读取数据try {ObjectMapper objectMapper = new ObjectMapper(new YAMLFactory());Map<String, Object> loadedData = objectMapper.readValue(new File("JacksonYAML_output.yaml"), Map.class);System.out.println("从YAML文件中读取的数据:");System.out.println(loadedData);} catch (IOException e) {e.printStackTrace();}}}

效果

---
address:zip: "10001"city: "New York"
name: "John Doe"
isEmployed: true
age: 30

YAMLBeans

maven

<dependency><groupId>com.esotericsoftware.yamlbeans</groupId><artifactId>yamlbeans</artifactId><version>1.15</version>
</dependency>

java

package com.github.houbb.yaml.test;import com.esotericsoftware.yamlbeans.YamlReader;
import com.esotericsoftware.yamlbeans.YamlWriter;import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;public class YAMLBeansExample {public static void main(String[] args) {Map<String, Object> data = new HashMap<>();data.put("name", "John Doe");data.put("age", 30);data.put("isEmployed", true);Map<String, Object> addressData = new HashMap<>();addressData.put("city", "New York");addressData.put("zip", "10001");data.put("address", addressData);// 将 Java 对象写入 YAML 文件try (FileWriter writer = new FileWriter("YAMLBeans_output.yaml")) {YamlWriter yamlWriter = new YamlWriter(writer);yamlWriter.write(data);yamlWriter.close();System.out.println("YAML 文件已生成。");} catch (IOException e) {e.printStackTrace();}// 从 YAML 文件中读取数据try (FileReader reader = new FileReader("YAMLBeans_output.yaml")) {YamlReader yamlReader = new YamlReader(reader);Map loadedData = (Map) yamlReader.read();System.out.println("从 YAML 文件中读取的数据:");System.out.println(loadedData);} catch (IOException e) {e.printStackTrace();}}
}

输出

address: zip: 10001city: New York
name: John Doe
isEmployed: true
age: 30

小结

yaml 解析的组件比较多,可以选择自己合适的。

也可以考虑实现一个我们自己的 yaml 解析工具。

考虑技术的矩阵:

xml

property

json

csv

java-bean

相关文章:

YAML-02-yml 配置文件 java 整合使用 yamlbeans + snakeyaml + jackson-dataformat-yaml

java 中处理 yml 的开源组件是什么&#xff1f; 在Java中处理YAML&#xff08;YAML Aint Markup Language&#xff09;格式的开源组件有很多&#xff0c;其中一些比较常用的包括&#xff1a; SnakeYAML&#xff1a; SnakeYAML 是一个Java库&#xff0c;用于解析和生成YAML格式…...

【综述+LLMs】国内团队大语言模型综述:A Survey of Large Language Models (截止2023.11.24)

Github主页&#xff1a; https://github.com/RUCAIBox/LLMSurvey 中文版v10:https://github.com/RUCAIBox/LLMSurvey/blob/main/assets/LLM_Survey_Chinese.pdf 英文版v13: https://arxiv.org/abs/2303.18223 解析&#xff1a;大语言模型LLM入门看完你就懂了&#xff08;一&…...

开始喜欢上了runnergo,JMeter out了?

RunnerGo是一款基于Go语言、国产自研的测试平台。它支持高并发、分布式性能测试。和JMeter不一样的是&#xff0c;它采用了B/S架构&#xff0c;更灵活、更方便。而且&#xff0c;除了API测试和性能测试&#xff0c;RunnerGo还加上了UI测试和项目管理等实用功能&#xff0c;让测…...

LLM - 大语言模型的分布式训练 概述

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://blog.csdn.net/caroline_wendy/article/details/136924304 大语言模型的分布式训练是一个复杂的过程&#xff0c;涉及到将大规模的计算任务分散到多个计算节点上。这样做的目的是为了处…...

Spring Cloud Alibaba 整合Seata分布式事务

目录 前言步骤引入相关maven依赖添加相关配置Client端配置注册中心Server端配置注册中心Seata-Server相关配置启动seata-server 使用方法Seata AT 模式整体机制 步骤初始化表结构标记注解GlobalTransactional 总结 前言 在数字化转型的浪潮下&#xff0c;企业业务系统的复杂度…...

unity 多屏幕操作

想了解基础操作请移步&#xff1a;&#xff08;重点是大佬写的好&#xff0c;这里就不再赘述&#xff09; Unity 基础 之 使用 Display 简单的实现 多屏幕显示的效果_unity display-CSDN博客 在panel上也可以通过获取 Canvas&#xff0c;来达到切换多屏幕的操作&#xff0c; …...

4、Jenkins持续集成-用户权限和凭证管理

文章目录 一、用户权限管理1、安装用户权限管理插件2、开启权限全局安全配置3、创建角色4、创建用户5、给用户分配角色6、创建项目测试权限二、凭证管理1、安装凭证管理插件2、安装Git插件和工具2.1 用户密码类型2.2 SSH密钥类型一、用户权限管理 利用Role-based Authorizatio…...

K8s-网络原理-中篇

引言 本文是《深入剖析 K8s》的学习笔记&#xff0c;相关图片和案例可从https://github.com/WeiXiao-Hyy/k8s_example中获取&#xff0c;欢迎 ⭐️! 上篇主要介绍了 Flannel 插件为例&#xff0c;讲解了 K8s 里容器网络和 CNI 插件的主要工作原理。还有一种“纯三层”的网络方…...

vue基础——java程序员版(vue路由)

1、引入路由 在控制台执行vue ui&#xff0c;在插件市场里可以找到vue-router并导入。 ​ 一般情况下&#xff0c;vue会自动在main,js中引入vue-router&#xff0c;如下&#xff1a; import Vue from vue import App from ./App.vue import ./plugins/element.js import rou…...

【vue3学习之路(一)】

文章目录 前言一、vue3项目创建1.1环境准备1.1.1 基于 vue-cli 创建&#xff08;脚手架创建&#xff09;1.1.2 基于 vite 创建&#xff08;推荐&#xff09; 二、熟悉流程总结 前言 参考视频&#xff1a;https://www.bilibili.com/video/BV1Za4y1r7KE?p10&spm_id_frompag…...

基于Spring Boot网络相册设计与实现

摘 要 网络相册设计与实现的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&am…...

6 Spring-AOP

文章目录 1&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给容器…...

这回轮到鸿蒙禁用安卓了!!!

1月18日&#xff0c;鸿蒙生态千帆仪式上&#xff0c;华为正式宣布了HarmonyOS NEXT&#xff08;下简称鸿蒙星河版或纯血鸿蒙&#xff09;开发者预览已向开发者开放申请&#xff0c;纯血鸿蒙开始走向普及阶段。伴随着不再兼容安卓的纯血鸿蒙铺开&#xff0c;鸿蒙走进了运营属于自…...

Java问题详解

在Java中&#xff0c;问题可能涵盖多个领域&#xff0c;如基础知识、高级特性、设计模式、性能优化、并发编程等。下面&#xff0c;我将提供两个问题以及对它们的详细回答。请注意&#xff0c;2000字的要求可能过于庞大&#xff0c;我将尽量确保回答详细而不过于冗长。 问题1&…...

Go——指针和内存逃逸

区别于C/C中的指针&#xff0c;Go语言中的指针不能进行偏移和运算&#xff0c;是安全指针。 要搞明白Go语言中的指针概念需要先知道3个概念&#xff1a;指针地址&#xff0c;指针类型和指针取值。 一. Go语言的指针 Go语言中的函数传参都是值拷贝&#xff0c;当我们想修改某个…...

PTA L2-032 彩虹瓶

彩虹瓶的制作过程&#xff08;并不&#xff09;是这样的&#xff1a;先把一大批空瓶铺放在装填场地上&#xff0c;然后按照一定的顺序将每种颜色的小球均匀撒到这批瓶子里。 假设彩虹瓶里要按顺序装 N 种颜色的小球&#xff08;不妨将顺序就编号为 1 到 N&#xff09;。现在工…...

Spring和Spring Boot之间的区别

Spring和Spring Boot之间的区别 不仅仅体现在操作简化、配置方式以及开发速度上&#xff0c;还有以下几个方面&#xff1a; 模块化和功能范围&#xff1a; Spring是一个完整的框架&#xff0c;提供了各种各样的功能&#xff0c;包括依赖注入、面向切面编程、数据访问、事务管…...

海外客户获取难?海外云手机助力电商引流!

海外电商面临的市场竞争激烈&#xff0c;如何在海外市场获客成为了摆在许多卖家面前的难题。而在这个问题的解决方案中&#xff0c;海外云手机崭露头角&#xff0c;成为助力电商引流的新利器。 在当前市场中&#xff0c;云手机主要用于游戏挂机&#xff0c;但其潜力在海外电商领…...

什么情况下 C++ 需要垃圾处理机制?

C&#xff0c;作为一种以性能和灵活性著称的编程语言&#xff0c;历来以其严谨的手动内存管理而闻名。然而&#xff0c;尽管C提供了丰富的工具如RAII&#xff08;Resource Acquisition Is Initialization&#xff09;原则、智能指针等来协助开发者有效地管理内存&#xff0c;但…...

流畅的 Python 第二版(GPT 重译)(七)

第十三章&#xff1a;接口、协议和 ABCs 针对接口编程&#xff0c;而不是实现。 Gamma、Helm、Johnson、Vlissides&#xff0c;《面向对象设计的第一原则》 面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...