java 解析 yaml


当前还在维护的YAML解析器/生成器有:
  • SnakeYAML
    • 完整的YAML 1.1解析器,尤其是SnakeYAML能够分析来自于规范的所有示例
    • 支持Unicode,包括UTF-8/UTF-16的输入/输出
    • 为序列化和反序列化本地的Java对象提供了高级API
    • 支持YAML类型库中的所有类型
    • 比较理性的错误信息
  • YamlBeans:支持YAML 1.0和1.1
  • FasterXML/jackson-dataformat-yaml:处于原型阶段

SnakeYAML和YamlBeans都在Google Code仓库时,SnakeYAML的使用人数和提交者均优于YamlBeans。目前大多数帖子还是推荐选用SnakeYAML,而SpringBoot读取YAML配置采用的就是SnakeYAML。

为了测试SnakeYAML,我首先创建了一个HelloSnakeYAML项目。

conf.yaml

spring:
    application:
        name: cruncher
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost/test
server:
    port: 9000

Contact.java

package com.yqu.yaml;

import java.util.List;

public class Contact {
    private String name;
    private int age;
    private List phoneNumbers;

    public Contact(String name, int age, List phoneNumbers) {
        this.name = name;
        this.age = age;
        this.phoneNumbers = phoneNumbers;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public List getPhoneNumbers() {
        return phoneNumbers;
    }

    public void setPhoneNumbers(List phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
}

Phone.java

package com.yqu.yaml;

public class Phone {
    private String name;
    private String number;

    public Phone(String name, String number) {
        this.name = name;
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }
}

HelloSnakeYAML.java

package com.yqu.yaml;


import org.yaml.snakeyaml.Yaml;

import java.io.FileInputStream;
import java.io.FileWriter;
import java.net.URL;
import java.util.Arrays;
import java.util.List;

public class HelloSnakeYAML {
    public static void test1() {
        try {
            Yaml yaml = new Yaml();
            URL url = HelloSnakeYAML.class.getClassLoader().getResource("conf.yaml");
            if (url != null) {
                Object obj = yaml.load(new FileInputStream(url.getFile()));
                System.out.println(obj);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void test2() {
        try {
            Contact c1 = new Contact("test1", 1, Arrays.asList(
                    new Phone("home", "1111"),
                    new Phone("work", "2222")));
            Contact c2 = 

你可能感兴趣的:(编程技术,自动化测试)