test.yml文件内容如下:
file:
- path: "/"
owners: ["a", "b"]
- path2: "aaa"
owners: ["c", "d"]
- path3:
- aaaa:
- bbbb: "b"
id: Ex1
coverage:
file_suffix: [ ".java" ]
如何使用snakeyaml解析出来对应的值
<dependencies>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.26</version>
</dependency>
</dependencies>
上代码:
package com.test.main;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.yaml.snakeyaml.Yaml;
public class YmlConfig {
public static void main(String[] args) {
System.out.println(YmlConfig.allMap);
String ss3 = allMap.get("file.path2");
System.out.println("file.path2:"+ss3);
String ss4 = allMap.get("file.owners");
System.out.println("file.owners:"+ss4);
String ss5 = allMap.get("file.path3.aaaa.bbbb");
System.out.println("file.path3.aaaa.bbbb:"+ss5);
String ss6 = allMap.get("id");
System.out.println("id:"+ss6);
String ss7 = allMap.get("coverage.file_suffix");
System.out.println("coverage.file_suffix:"+ss7);
}
private static Map<String,String> allMap = new HashMap<String,String>();
static {
Yaml yaml = new Yaml();
InputStream inputStream = null;
try {
inputStream = new FileInputStream("C:\\Users\\baosenzhang\\IdeaProjects\\YmlStudy\\test.yml");
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Iterator<Object> result = yaml.loadAll(inputStream).iterator();
while(result.hasNext()){
Map map=(Map)result.next();
iteratorYml( map,null);
}
}
public static void iteratorYml(Map map,String key){
Iterator iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry entry = (Map.Entry) iterator.next();
Object key2 = entry.getKey();
Object value = entry.getValue();
if(value instanceof LinkedHashMap){
if(key==null){
iteratorYml((Map)value,key2.toString());
}else{
iteratorYml((Map)value,key+"."+key2.toString());
}
}
if(value instanceof String){
if(key==null){
allMap.put(key2.toString(), value.toString());
}
if(key!=null){
allMap.put(key+"."+key2.toString(), value.toString());
}
}
if (value instanceof ArrayList) {
if(key==null){
allMap.put(key2.toString(), value.toString());
Iterator<?> iter = ((ArrayList<?>) value).iterator();
while (iter.hasNext()){
Object next = iter.next();
if (next instanceof LinkedHashMap){
iteratorYml((Map)next,key2.toString());
}
}
}
if(key!=null){
allMap.put(key+"."+key2.toString(), value.toString());
Iterator<?> iter = ((ArrayList<?>) value).iterator();
while (iter.hasNext()){
Object next = iter.next();
if (next instanceof LinkedHashMap){
iteratorYml((Map)next,key+"."+key2.toString());
}
}
}
}
}
}
}
运行结果:
{file.path=/, coverage.file_suffix=[.java], file=[{path=/, owners=[a, b]}, {path2=aaa, owners=[c, d]}, {path3=[{aaaa=[{bbbb=b}]}]}], file.path3=[{aaaa=[{bbbb=b}]}], file.path2=aaa, file.path3.aaaa=[{bbbb=b}], id=Ex1, file.path3.aaaa.bbbb=b, file.owners=[c, d]}
file.path2:aaa
file.owners:[c, d]
file.path3.aaaa.bbbb:b
id:Ex1
coverage.file_suffix:[.java]