在Java中使用YAML:SnakeYAML和Jackson库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

在Java中使用YAML:SnakeYAML和Jackson库



YAML(YAML Ain't Markup Language)是一种人类可读的数据序列化格式,常用于配置文件、API描述和数据交换。在Java生态系统中,有多个用于处理YAML的库,但最流行的是SnakeYAML(底层解析器)和Jackson YAML(支持注解的高级解决方案)。本文将详细介绍这两个库、它们的功能以及使用示例。



1. SnakeYAML — 经典YAML解析器



SnakeYAML是一个简单轻量的库,提供对解析过程的完全控制。它支持所有YAML 1.1规范,并允许处理简单结构(Map、List)以及自定义对象。



安装SnakeYAML



如果您使用Maven,请在pom.xml中添加依赖:



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


对于Gradle:



implementation 'org.yaml:snakeyaml:2.2'


示例:将YAML字符串解析为Map



import org.yaml.snakeyaml.Yaml;import java.util.Map;

public class SnakeYamlExample { public static void main(String[] args) { String yamlString = """ server: host: localhost port: 8080 database: url: jdbc:mysql://localhost:3306/mydb user: admin password: secret """;

Yaml yaml = new Yaml(); Map<String, Object> data = yaml.load(yamlString);

System.out.println(data); // 输出:{server={host=localhost, port=8080}, database={url=jdbc:mysql://localhost:3306/mydb, user=admin, password=secret}} }}


示例:从文件加载YAML



import org.yaml.snakeyaml.Yaml;import java.io.FileInputStream;import java.io.InputStream;import java.util.Map;

public class SnakeYamlFileExample { public static void main(String[] args) { try (InputStream input = new FileInputStream("config.yaml")) { Yaml yaml = new Yaml(); Map<String, Object> data = yaml.load(input); System.out.println("端口: " + ((Map<String, Object>) data.get("server")).get("port")); } catch (Exception e) { e.printStackTrace(); } }}


示例:将Java对象序列化为YAML



import org.yaml.snakeyaml.Yaml;import java.util.Map;

public class SnakeYamlDumpExample { public static void main(String[] args) { Map<String, Object> data = Map.of( "name", "PythonLib", "version", 2.0, "features", List.of("YAML", "JSON", "XML") );

Yaml yaml = new Yaml(); String output = yaml.dump(data); System.out.println(output); // 输出: // features: // - YAML // - JSON // - XML // name: PythonLib // version: 2.0 }}


SnakeYAML的优点:

  • API简单,无多余依赖
  • 通过构造函数支持自定义类型
  • 灵活的解析配置(例如,忽略未知字段)


2. Jackson YAML — 支持注解的现代解决方案



Jackson YAML是流行库Jackson的一个模块,允许像处理JSON一样处理YAML。它支持注解(@JsonProperty、@JsonIgnore)、自动绑定到POJO以及流式处理。



安装Jackson YAML



Maven:




                
    
    

推荐