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 地址:bitbucket.org/asomov/snak...

    Maven依赖:

    xml 复制代码
    <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 地址:github.com/FasterXML/j...

    Maven依赖:

    xml 复制代码
    <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 地址:github.com/EsotericSof...

    Maven依赖:

    xml 复制代码
    <dependency>
        <groupId>net.sourceforge.yamlbeans</groupId>
        <artifactId>yamlbeans</artifactId>
        <version>1.14</version> 
    </dependency>

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

对比表格

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

特点 SnakeYAML Jackson YAML YAMLBeans
简单易用性 易用,提供简洁的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

xml 复制代码
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.29</version> 
</dependency>

入门

java 复制代码
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();
        }
    }
}

效果

yml 复制代码
address: {zip: '10001', city: New York}
name: John Doe
isEmployed: true
age: 30

Jackson YAML

maven

xml 复制代码
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.13.0</version> 
</dependency>

java

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();
        }
    }

}

效果

yml 复制代码
---
address:
  zip: "10001"
  city: "New York"
name: "John Doe"
isEmployed: true
age: 30

YAMLBeans

maven

xml 复制代码
<dependency>
    <groupId>com.esotericsoftware.yamlbeans</groupId>
    <artifactId>yamlbeans</artifactId>
    <version>1.15</version>
</dependency>

java

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();
        }
    }
}

输出

yml 复制代码
address: 
   zip: 10001
   city: New York
name: John Doe
isEmployed: true
age: 30

小结

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

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

考虑技术的矩阵:

xml

property

json

csv

java-bean

相关推荐
pianmian13 小时前
类(JavaBean类)和对象
java
我叫小白菜4 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
Albert Edison4 小时前
【最新版】IntelliJ IDEA 2025 创建 SpringBoot 项目
java·spring boot·intellij-idea
超级小忍5 小时前
JVM 中的垃圾回收算法及垃圾回收器详解
java·jvm
weixin_446122465 小时前
JAVA内存区域划分
java·开发语言·redis
勤奋的小王同学~5 小时前
(javaEE初阶)计算机是如何组成的:CPU基本工作流程 CPU介绍 CPU执行指令的流程 寄存器 程序 进程 进程控制块 线程 线程的执行
java·java-ee
TT哇5 小时前
JavaEE==网站开发
java·redis·java-ee
2401_826097625 小时前
JavaEE-Linux环境部署
java·linux·java-ee
缘来是庄6 小时前
设计模式之访问者模式
java·设计模式·访问者模式
Bug退退退1236 小时前
RabbitMQ 高级特性之死信队列
java·分布式·spring·rabbitmq