java版的yaml 解析器,试试jyaml
来源:互联网 发布:手机怎么发布淘宝宝贝 编辑:程序博客网 时间:2024/06/10 20:19
Jyaml是java版的处理yaml的类库。现在最新的版本是1.3版。使用的时候,将jar包加入classpath即可。
关于yaml
与xml进行比较可以很快看出其容易理解的文档格式化形式,在Ruby语言里面是主流的?文档格式。详细请参照:
http://yaml.org/
List的序列化和反序列化
向对象化的yaml的序列化,调用Yaml.dump方法即可。
List<String> list = new ArrayList<String>();list.add("seq1");list.add("seq2");Yaml.dump(list, new File("object.yml"));
生成了object.yml,内容如下:
--- - seq1- seq2
将上面的文件进行反序列化,使用Yaml.load方法即可:
Object obj = Yaml.load(new File("object.yml"));System.out.println(obj);
如下的输出,可以作为List读入。
[seq1, seq2]
Map的序列化和反序列化
关于map,用法一样的;
Map<String, String> map = new HashMap<String, String>();map.put("key1", "value1");map.put("key2", "value2");Yaml.dump(map, new File("object.yml"));
object.yml生成了,内容如下:
--- key2: value2key1: value1
同样使用发序列化方法:
Object obj = Yaml.load(new File("object.yml"));System.out.println(obj);
也可以作为map进行反序列化。
{key2=value2, key1=value1}
Object的序列化和反序列化
试试如下的Person对象的序列化,序列化的对象的默认构造方法是需要的。
package etc9;public class Person { private String name; private int age; public Person() {} public Person(String name, int age) { this.name=name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }}
序列化方法仍然跟上面的一样:
Person p = new Person("Thom", 33);Yaml.dump(p, new File("object.yml"));
yaml文件的输出如下:
如上的例子中,没有指定类,就会用简单的map来进行反序列化。
Person p = Yaml.loadType(new File("object.yml"), Person.class);
嵌入式的对象。
将Person作为子属性加入进去看看:
package etc9;public class Person { private String name; private int age; private Person child; ・・・ public Person getChild() { return child; } public void setChild(Person child) { this.child = child; }}
同样的流程进行序列化
Person p = new Person("Thom", 33);p.setChild(new Person("Mick", 5));Yaml.dump(p, new File("object.yml"));
输出文件的内容如下:
--- !etc9.Personage: 33child: !etc9.Person age: 5 name: Mickname: Thom
dump的第二个参数设定为true的话
Person p = new Person("Thom", 33);p.setChild(new Person("Mick", 5));Yaml.dump(p, new File("object.yml"), true);
就变成了如下的输出:
--- age: 33child: age: 5 name: Mickname: Thom
反序列化同样,用下面的方法即可:
Person r = Yaml.loadType(new File("object.yml"), Person.class);
多个Object的序列化:
多个Object的序列化可以使用YamlEncoder,如果这样:
Person p1 = new Person("Thom", 33);Person p2 = new Person("Mick", 5);YamlEncoder enc = new YamlEncoder(new FileOutputStream("object.yml"));enc.writeObject(p1);enc.writeObject(p2);
enc.close();
一下的内容的文件生成:
--- !etc9.Personage: 33name: Thom--- !etc9.Personage: 5
name: Mick
拥有迭代器的集合对象的时候,可以用下面的简单的形式:
Yaml.dumpStream(collection.iterator(), file);
反序列化用YamlDecoder ,比如下面的形式:
YamlDecoder dec = new YamlDecoder(inputStream);try { while (true){ Object object = dec.readObject(); /* do something useful */ }} catch (EOFException e){ System.out.println("Finished reading stream.");} finally dec.close();}
也可以这样子:
for (Object object: Yaml.loadStream(input)){ ・・・}
或者,这样子,用制定的类型:
for (Person p: Yaml.loadStreamOfType(input, Person.class)){ ・・・}
--- !etc9.Personage: 33name: Thom
反序列化使用Yaml.load,可以按etc9.Person的形式进行反序列化。
在dump方法中添加参数,如下的序列化的话,
在这种场合里面,是用对应的对象的类作为序列化的。
Person p = new Person("Thom", 33);Yaml.dump(p, new File("object.yml"), true);
就会有如下的输出:
--- age: 33name: Thom
1 0
- java版的yaml 解析器,试试jyaml
- YAML的Java实现——JYAML基本原理与示例(2)导入YAML格式文件
- YAML的Java实现——JYAML基本原理与示例(3)YAML对文件流的处理
- 使用JYaml实现Java对象与Yaml间的序列化与反序列化
- YAML的Java实现——JYAML基本原理与示例(1)导出数据为YAML格式文件
- java 解析 yaml
- Java解析Yaml介绍
- Java解析yaml
- Yaml介绍及JYaml将数据写入yaml文件
- Go语言解析YAML
- Java读取Yaml文件
- java 读写 yaml 文件
- 使用node解析yaml文件
- yaml的使用及.yaml文件格式问题
- yaml 4种java支持库的比较
- Java 操作yaml和json之间的互相转换
- YAML的PHPphp扩展。
- YAML的简单介绍
- 数据库三大范式
- javascript的属性与方法
- 创建Restful WCF
- redis简单测试用例(内存不足,可以使用redis)
- 本文解决两个问题,第一spring.net+nh+mysql 中mysql版本配置问题,第二nh配置问题
- java版的yaml 解析器,试试jyaml
- 利用secureCRT中实现windows和linux的文件互传
- Android Framework 分析---2消息机制Native层
- 简单的Apache服务器配置
- 中石油出售千亿资产背后暗藏啥玄机?
- oracle表连接--->排序合并连接
- VB6 shell 打印
- cocos2d-x中使图片背景全透明(另一种方法)
- POJ 2375 Cow Ski Area 强连通