Java解析yaml文件

1. 什么是yaml ?

参考下方链接
yaml快速入门

2. 导入maven依赖

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

3. yaml 案例文件

name: steven
phone: 18********5
company: "******"
teamMember:
  -**
  -**
  -**
hobbies:
      foods:
        - 黄焖鸡米饭
        - 黄焖排骨
        - 五花肉
        - 热干面
      sports:
        - 羽毛球
        - 骑车
        - 跑步
      works:
        - coding
        - repairComputer
working-skills:
  - Java
  - Hadoop
  - hive
  - spark
  - flink
  - kafka
  - HBASE

4. 示例代码

import org.yaml.snakeyaml.Yaml;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

public class 解析yaml {
    public static void main(String[] args) throws FileNotFoundException {
        // 1. 使用流关联yml配置文件
        BufferedReader br = new BufferedReader(new FileReader(解析yaml.class.getClassLoader().getResource("testyaml.yaml").getPath()));

        // 2. 创建yaml工具类
        Yaml yaml = new Yaml();

        // 3. 使用yaml工具类加载 流
        // 返回的字符形式非常类似于JSON, 但又不是JSON, 因为返回的字符之间使用的是 = 号连接的
        // 可以直接转换为Map 进行处理, key 的类型是 字符串, value的类型为Object
        Map<String, Object> objectMap = (Map<String, Object>) yaml.load(br);

        // 4. 以下就是获取yaml文件中的内容, 可以通过遍历map的方式获取, 也可以按照kv的形式获取
        
        // 获取所有的key
        Set<String> keySet = objectMap.keySet();
        // 通过 key 获取value
        for (String key : keySet) {
            System.out.println(key + "\t : " + objectMap.get(key).toString());
        }

        // 获取单值
        Object name = objectMap.get("name");
        System.out.println(name);

        // 获取数组类型
        ArrayList<String> teamMember = (ArrayList<String>) objectMap.get("teamMember");
        for (String member : teamMember) {
            System.out.println(member);
        }

        // 获取复合对象 , 注意类型为 LinkedHashMap
        LinkedHashMap<String, ArrayList<String>> hobbies = (LinkedHashMap<String, ArrayList<String>>) objectMap.get("hobbies");
        for (Map.Entry<String, ArrayList<String>> listEntry : hobbies.entrySet()) {
            System.out.println(listEntry.getKey() + " : " + listEntry.getValue());
        }
    }
}

5. 解析结果

name	 : steven
phone	 : 18********5
company	 : ******
teamMember	 : [于**, 徐**, 索**]
hobbies	 : {foods=[黄焖鸡米饭, 黄焖排骨, 五花肉, 热干面], sports=[羽毛球, 骑车, 跑步], works=[coding, repairComputer]}
working-skills	 : [Java, Hadoop, hive, spark, flink, kafka, HBASE]
steven
于**
徐**
索**
foods : [黄焖鸡米饭, 黄焖排骨, 五花肉, 热干面]
sports : [羽毛球, 骑车, 跑步]
works : [coding, repairComputer]

欢迎大家留言一起讨论学习!