我们可以使用loadAll()方法解析以上内容,如以下代码示例所示:
@Test public void whenLoadMultipleYAMLDocuments_thenLoadCorrectJavaObjects() { Yaml yaml = new Yaml(new Constructor(Customer.class)); InputStream inputStream = this.getClass() .getClassLoader() .getResourceAsStream("yaml/customers.yaml"); int count = 0; for (Object object : yaml.loadAll(inputStream)) { count++; assertTrue(object instanceof Customer); } assertEquals(2,count); } 5.生成YAML文件SnakeYAML 支持 将java对象序列化为yml。
5.1。基本用法我们将从一个将Map <String,Object>的实例转储到YAML文档(String)的简单示例开始:
@Test public void whenDumpMap_thenGenerateCorrectYAML() { Map<String, Object> data = new LinkedHashMap<String, Object>(); data.put("name", "Silenthand Olleander"); data.put("race", "Human"); data.put("traits", new String[] { "ONE_HAND", "ONE_EYE" }); Yaml yaml = new Yaml(); StringWriter writer = new StringWriter(); yaml.dump(data, writer); String expectedYaml = "name: Silenthand Olleander\nrace: Human\ntraits: [ONE_HAND, ONE_EYE]\n"; assertEquals(expectedYaml, writer.toString()); }上面的代码产生以下输出(请注意,使用LinkedHashMap的实例将保留输出数据的顺序):
name: Silenthand Olleander race: Human traits: [ONE_HAND, ONE_EYE] 5.2。自定义Java对象我们还可以选择将自定义Java类型转储到输出流中。
@Test public void whenDumpACustomType_thenGenerateCorrectYAML() { Customer customer = new Customer(); customer.setAge(45); customer.setFirstName("Greg"); customer.setLastName("McDowell"); Yaml yaml = new Yaml(); StringWriter writer = new StringWriter(); yaml.dump(customer, writer); String expectedYaml = "!!com.baeldung.snakeyaml.Customer {age: 45, contactDetails: null, firstName: Greg,\n homeAddress: null, lastName: McDowell}\n"; assertEquals(expectedYaml, writer.toString()); }生成内容会包含!!com.baeldung.snakeyaml.Customer,为了避免在输出文件中使用标签名,我们可以使用库提供的 dumpAs()方法。
因此,在上面的代码中,我们可以进行以下调整以删除标记:
yaml.dumpAs(customer, Tag.MAP, null); 六 结语本文说明了SnakeYAML库解析和序列化YAML文档。
所有示例都可以在GitHub项目中找到。
附录英文原文: Parsing YAML with SnakeYAML
作者:Jadepeng
出处:jqpeng的技术记事本--
您的支持是对博主最大的鼓励,感谢您的认真阅读。
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。