探索SnakeYAML:Java中的YAML数据加载与解析

在现代软件开发中,YAML(YAML Ain’t Markup Language)格式因其简洁和易于阅读的特性而受到开发者的青睐。在Java世界中,SnakeYAML是一个流行的库,用于解析和生成YAML数据。本文将通过几个实例,详细探讨如何使用SnakeYAML在Java中加载和解析YAML数据。

1. 从字符串加载YAML数据

首先,我们来看如何从一个YAML格式的字符串加载数据。以下是一个简单的Java类,演示了如何实现这一过程:

import org.yaml.snakeyaml.Yaml;

public class LoadingString {
    public static void main(String[] args) {
        Yaml yaml = new Yaml();
        Object obj = yaml.load(getStringYmlData());
        System.out.println("Loaded object type: " + obj.getClass());
        System.out.println(obj);
    }

    public static String getStringYmlData() {
        return "name: Joe\n"
                + "phone: 111-111-1111\n"
                + "address: Park Dr, Charlie Hill";
    }
}
输出结果
Loaded object type: class java.util.LinkedHashMap
{name=Joe, phone=111-111-1111, address=Park Dr, Charlie Hill}

2. 从文件加载YAML数据

接下来,我们探索如何从文件中加载YAML数据。以下代码展示了如何实现:

import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
import java.io.IOException;

public class LoadFile {
    public static void main(String[] args) throws IOException {
        Yaml yaml = new Yaml();
        try (InputStream in = LoadFile.class.getResourceAsStream("/person.yml")) {
            Object obj = yaml.load(in);
            System.out.println("Loaded object type:" + obj.getClass());
            System.out.println(obj);
        }
    }
}
文件内容 (src/main/resources/person.yml)
name: Joe
phone: 111-11-11111
address: Park Dr, Charlie Hill
输出结果
Loaded object type:class java.util.LinkedHashMap
{name=Joe, phone=111-11-11111, address=Park Dr, Charlie Hill}

3. 从文件加载多个YAML文档

SnakeYAML还支持从单个文件中加载多个YAML文档。以下是一个示例:

文件内容 (src/main/resources/persons.yml)
name: Joe
phone: 111-111-1111
address: Park Dr, Charlie Hill
---
name: Trish
phone: 111-111-11111
address: Small Vine, River Town
import org.yaml.snakeyaml.Yaml;
import java.io.InputStream;
import java.io.IOException;
import java.util.Iterator;

public class LoadAll {
    public static void main(String[] args) throws IOException {
        loadFromFile("/person.yml");
        loadFromFile("/persons.yml");
    }

    private static void loadFromFile(String path) throws IOException {
        System.out.printf("-- loading from %s --%n", path);
        Yaml yaml = new Yaml();
        try (InputStream in = LoadAll.class.getResourceAsStream(path)) {
            Iterable<Object> itr = yaml.loadAll(in);
            System.out.println("-- iterating loaded Iterable --");
            for (Object o : itr) {
                System.out.println("element type: " + o.getClass());
                System.out.println(o);
            }
        }
    }
}
输出结果
-- loading from /person.yml --  
-- iterating loaded Iterable --  
element type: class java.util.LinkedHashMap  
{name=Joe, phone=111-111-1111, address=Park Dr, Charlie Hill}  
-- loading from /persons.yml --  
-- iterating loaded Iterable --  
element type: class java.util.LinkedHashMap  
{name=Joe, phone=111-111-1111, address=Park Dr, Charlie Hill}  
element type: class java.util.LinkedHashMap  
{name=Trish, phone=111-111-11111, address=Small Vine, River Town}

项目依赖和技术栈

  • SnakeYAML 1.18: YAML 1.1 解析器和生成器,用于Java。
  • JDK 1.8
  • Maven 3.3.9

通过上述示例,我们可以看到SnakeYAML在Java中加载和解析YAML数据的强大功能。无论是从字符串还是文件,SnakeYAML都提供了简单而强大的API来处理YAML数据。希望这篇文章能帮助你在项目中更有效地使用YAML。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

t0_54coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值