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]

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

真香IT

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

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

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

打赏作者

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

抵扣说明:

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

余额充值