JAVA基于SnakeYAML实现解析与序列化YAML

  

这篇文章主要介绍了JAVA基于SnakeYAML实现解析与序列化YAML,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

  

<强> 1。概述
  

  

本文,我们将学习如何使用SnakeYAML库将
  

  

YAML文档转换为Java对象,以及Java对象如何序列化为YAML文档。

  

<强> 2。项目设置
  

  

要在项目中使用SnakeYAML,需要添加Maven依赖项(可在此处找到最新版本):

        & lt; dependency>   & lt; groupId> org.yaml   & lt; artifactId> snakeyaml   & lt; version> 1.25 & lt;/version>   & lt;/dependency>      

<强> 3。入口点
  

  

该YAML类是API的入口点:

        Yaml Yaml=new Yaml ()      

由于实现不是线程安全的,因此不同的线程必须具有自己的Yaml实例。

  

<强> 4。加载YAML文档
  

  

SnakeYAML支持从字符串或InputStream加载文档,我们从定义一个简单的YAML文档开始,然后将文件命名为customer.yaml:

        名字:“约翰”   姓:“母鹿”   年龄:20      

4.1基本用法
  

  

现在,我们将使用Yaml类来解析上述Yaml文档:

        Yaml Yaml=new Yaml ();   InputStream InputStream=this.getClass ()   .getClassLoader ()   .getResourceAsStream (“customer.yaml”);   Object> Map<字符串;obj=yaml.load (inputStream);   System.out.println (obj);      

上面的代码生成以下输出:

        {firstName=约翰,lastName=能源部、年龄=20}      

默认情况下,负载()方法返回一个地图对象。查询地图对象时,我们需要事先知道属性键的名称,否则容易出错。更好的办法是自定义类型。

  

4.2自定义类型解析
  

  

SnakeYAML提供了一种将文档解析为自定义类型的方法

  

让我们定义一个客户类,然后尝试再次加载该文档:

        公共类客户{      私人字符串firstName;   私人字符串姓;   私人int年龄;//getter和setter   }      

现在我么来加载:

        Yaml Yaml=new Yaml ();   InputStream InputStream=this.getClass ()   .getClassLoader ()   .getResourceAsStream (“customer.yaml”);   客户客户=yaml.load (inputStream);      

还有一种方法是使用构造函数:

        Yaml Yaml=new Yaml(新构造函数(Customer.class));      

4.3隐式类型
  

  

如果没有为给定属性定义类型,则库会自动将值转换为隐式类型。

  

例如:         1.0→浮动   42→整数   2009-03-30→<日期/pre>      

让我们使用一个TestCase来测试这种隐式类型转换:

        @Test   公共空间whenLoadYAML_thenLoadCorrectImplicitTypes () {   Yaml Yaml=new Yaml ();   Object> Map<对象;文档=yaml.load (3.0: 2018-07-22);      assertNotNull(文档);   assertequal (document.size ());   assertTrue (document.containsKey (3.0 d));   }      

4.4嵌套对象
  

  

SnakeYAML支持嵌套的复杂类型。

  

让我们向“客户。yaml“添加“联系方式”和“地址”详细信息,并将新文件另存为customer_with_contact_details_and_address.yaml . .

  

现在,我们将分析新的YAML文档:

        名字:“约翰”   姓:“母鹿”   年龄:31   contactDetails:   类型:“移动”   号码:123456789   类型:“固定电话”   号码:456786868   homeAddress:   行:“Xyz, DEF街”   城市:“Y城”   状态:“Y”   邮政编码:345657      

我们来更新java类:

        公共类客户{   私人字符串firstName;   私人字符串姓;   私人int年龄;   私人ListcontactDetails;   私有地址homeAddress;//getter和setter   }      公开课联系{   私人字符串类型;   私人int数;//getter和setter   }      公共类地址{   私人字符串行;   私人的字符串;   私人弦状态;   私人整数邮政;//getter和setter   }

JAVA基于SnakeYAML实现解析与序列化YAML