snakeyaml解析yaml文件及序列化

snakeyaml基础用法

  • 引包
<dependency>
    <groupId>org.yaml</groupId>
    <artifactId>snakeyaml</artifactId>
    <version>1.23</version>
</dependency>
  • 定义一个简单的yaml文档:user.yaml
name: 张三
sex: 男
age: 26
  • 读取
File file = new File("user.yml");
if (file.exists()) {
	Yaml yaml = new Yaml();
	User user = yaml.loadAs(new FileInputStream(file), User.class);
	System.out.println(user);
}
  • 序列化
// 用于配置yaml文件中对应tag响应解析成的对象
Representer representer = new Representer();
//representer.addClassTag(Car.class, new Tag("!car"));//这里!car就会使用Car类型来解析,而不需要再配置文件中写全car的包名
representer.addClassTag(User.class, Tag.MAP);//会使用User对map的类型进行解析,不会生成!!和包路径

// 这个是在dump时,控制输出的宽度,对齐,类类型等相关信息
DumperOptions options = new DumperOptions();
options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);// 普通yml格式
//options.explicitStart(true);//会有感叹号
//options.setWidth(50);
//options.setIndent(4);

Yaml yaml = new Yaml(representer, options);
yaml.dump(user, new FileWriter("user.yml"));
  • 其他

  • resolver
    用于隐式识别对应类型,只要符合了对应的pattern就会使用对应的tag进行解析
    yaml.addImplicitResolver(new Tag("!dice"), Pattern.compile("\d+d\d+"), “123456789”);

  • constructor
    用于配置构造对象的创建过程

  • load()返回Object,参数可以为字符串,文件流,字符流
    public Object load(String yaml)
    public Object load(InputStream io)
    public Object load(Reader io)
    可以使用List或者Map接收

  • loadAll())返回Object的迭代器,参数可以为字符串,文件流,字符流
    public Iterable loadAll(String yaml)
    public Iterable loadAll(InputStream yaml)
    public Iterable loadAll(Reader yaml)
    如果文件中含有—进行分组,则loadAll()迭代出每组数据

  • loadAs()返回指定对象,参数可以为字符串,文件流,字符流
    public T loadAll(String yaml,Class type)
    public T Iterable loadAll(InputStream yaml,Class type)
    public T Iterable loadAll(Reader yaml,Class type)
    如果不指定类类型,用load()也可以返回指定对象

    文件中在第一行写上对应的类路径 — !!cn.xxx.yaml.demo.user
    如果不想写,可以创建Yaml对象时传入Constructor对象

  • yuml生成
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值