java中snakeyaml工具包操作yaml文件,什么是yaml文件,yaml如何解析转换为实体,实体如何生成yaml文件

什么是yaml文件

这里就不去搞yaml的书面意思了,其实就可以理解为一种数据文件,里面的数据是以键值对的方式存储的。java中map就是键值对的形式,我们带着这个概念去理解。举个例子:

school:
  classroom:
    student:
    - 小明
    - 小红
    teacher: 老王
  playground:
  - 足球场
  - 篮球场

school有两个属性:classroom和playground
class有两个属性:student和teacher
对应的java实体就是这样的:

public class YamlPojo {
	private School school;
	public static class School {
		private Classroom classroom;
		private List<String> playground;
	}
	public static class Classroom {
		private List<String> student;
		private String teacher;
	}
}

这样呢,就把yaml文件和java实体对应了起来,有了对应关系,接下来就是通过snakeyaml来进行操作了。
当然,少不了依赖哦,我用的1.26版本,相对稳定,其他版本的也满足使用需求

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

snakeyaml解析yaml文件

如何将yaml文件转成java实体呢,超级简单啦,上代码!

File file = new File("yaml文件路径");
Yaml yaml = new Yaml();
YamlPojo yamlPojo = yaml.loadAs(new FileReader(file), YamlPojo.class);

这样就ok啦!

snakeyaml通过java实体生成yaml文件

snakeyaml生成的yaml文件会有标准的缩进,我们不用关心格式问题,只关心实体类即可

File file = new File("yaml文件路径"); //这里会覆盖原文件哦,所以如果有编辑yaml文件的需求,就是先解析,修改值,然后写入。
Yaml yaml = new Yaml();
FileWriter fileWriter = new FileWriter(file);
fileWriter.write(yaml.dumpAsMap(yamlPojo)); //yamlPojo是我们的实体类对象,自行生成即可
fileWriter.close();

一些小问题

如果实体里有属性的值是空,生成的yaml文件里面就会是null,如下:怎么转储空字段呢?

school:
  classroom:
    student:
    - 小明
    - 小红
    teacher: null
  playground:null

我们可以自定义null值的输出形式:

public void test() {
	DumperOptions options = new DumperOptions();
	options.setDefaultFlowStyle(FlowStyle.BLOCK);
	Yaml yaml = new Yaml(new NullRepresenter(), options);
	FileWriter fileWriter = new FileWriter(file);
	fileWriter.write(yaml.dumpAsMap(yamlPojo)); //yamlPojo是我们对应的实体类对象,自行生成即可
	fileWriter.close();
}

public class NullRepresenter extends Representer {
    public NullRepresenter() {
        super();
        this.nullRepresenter = new RepresentNull();
    }

    private class RepresentNull implements Represent {
        public Node representData(Object data) {
            return representScalar(Tag.NULL, "");
        }
    }
}

这样输出的yaml就是这样的了:

school:
  classroom:
    student:
    - 小明
    - 小红
    teacher:
  playground:
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值