1.yaml概要
初次接触到yaml语言,是在做一个过程优化时,希望对一系列配置引入的数据得到规范。希望代码中获取数据简便,也希望规范能够明了易懂
在接触yaml应用前,基本使用的文件xml。而同样拥有语言规范的yaml文件相比xml,没有类似XML的语言定义文件纲要──例如xml需要保证本身的结构正确、节点无缺失等。
2.yaml结构规范
# YAML文件普遍格式
---
site:
name: sina
url : http://www.sina.com.cn
---
site:
name: google
url : http://www.google.com
或:
---
site: {name: sina, url: http://www.sina.com.cn}
---
site: {name: google, url: http://www.google.com}
YAML利用缩进或者是explicit indicatior(如上面的{})来表示属性的嵌套,更为直观。
3.java代码实现
#snakeyaml.jar包
new Yaml().load() --把yml转为obj
new Yaml().dump() --把obj转为yml
YAML与java类型对照表:
YAML | JAVA |
---|---|
!null | null |
!!bool | Boolean |
!!int | Integer, Long, BigInteger |
!!float | Double |
!!binary | String |
!!timestamp | java.util.Date, java.sql.Date, java.sql.Timestamp |
!!omap, !!pairs | List of Object[] |
!!set | Set |
!!str | String |
!!seq | List |
!!map | Map |
集合的默认实现是:
- List: ArrayList
- Map: LinkedHashMap
4.此次项目中需要的代码实现块
public static List<OrderType> getYamlData(String yaml) throws IllegalAccessException, InvocationTargetException {
List<OrderType> list = new ArrayList<OrderType>();
LinkedHashMap map = (LinkedHashMap) new Yaml().load(yaml);
for (Iterator it = map.keySet().iterator(); it.hasNext();) {
OrderType data = new OrderType();
Object orderType = it.next();
System.out.println(orderType + "=" + map.get(orderType));
LinkedHashMap value = (LinkedHashMap) map.get(orderType);
for (Iterator its = value.keySet().iterator(); its.hasNext();) {
Object values = its.next();
BeanUtils.populate(data, value);
}
//System.out.println(data.toString());
list.add(data);
}
return list;
}
5.初学时学习的博客
http://blog.csdn.net/conquer0715/article/details/42108061
http://blog.csdn.net/lucky_greenegg/article/details/60957462