一、YAML是什么?
YAML是YAML Ain't Markup Language递归缩写,是YAML不是标记语言的意思,读音“yamel”(或者“雅梅尔”)。YAML是便于人阅读基于unicode编码的各种语言的序列号标准。它的用途广泛,用于配置文件,日志文件,跨语言数据共享,对象持久化,复杂的数据结构。
二、yaml有什么特性,为什么使用yaml?
1、易于阅读;使用缩进,冒号(:),破折号(-)等人易于理解方式显示复杂的数据结构。
2、YAML数据在语言之间可以移植的。
3、符合敏捷语言的数据结构。
4、支持一次性操作。
5、具有表现力和可扩展性。
6、易于实现和使用
三、YAML与JSON
形同点:
1、YAML和JSON都是便于人阅读的数据交换格式。
不同点:
1、JSON设计主要在于简单和通用。YAML设计主要在于易于阅读和支持任何复杂的数据结构。
2、YAML可以视为JSON的超集,提供更易于阅读和复杂的信息模型。
3、每个JSON文件都是一个YAML文件,从JSON到YAML迁移是很容易的事情。
四、YAML与XML
YAML主要是数据序列号语言。XXML设计是对SGML的向后兼容。XML有设计约束,而YAML没有。
五、YAML示例
例1. Invoice
--- !<tag:clarkevans.com,2002:invoice>
invoice: 34843
date : 2001-01-23
bill-to: &id001
given : Chris
family : Dumars
address:
lines: |
458 Walkman Dr.
Suite #292
city : Royal Oak
state : MI
postal : 48046
ship-to: *id001
product:
- sku : BL394D
quantity : 4
description : Basketball
price : 450.00
- sku : BL4438H
quantity : 1
description : Super Hoop
price : 2392.00
tax : 251.42
total: 4443.52
comments:
Late afternoon is best.
Backup contact is Nancy
Billsmer @ 338-433
例2. Log File
---
Time: 2001-11-23 15:01:42 -5
User: ed
Warning:
This is an error message
for the log file
---
Time: 2001-11-23 15:02:31 -5
User: ed
Warning:
A slightly different error
message.
---
Date: 2001-11-23 15:03:17 -5
User: ed
Fatal:
Unknown variable "bar"
Stack:
- file: TopClass.py
line: 23
code: |
x = MoreObject("345\n")
- file: MoreClass.py
line: 58
code: |-
foo = bar
六、JAVA中如何使用YAML?
1、yamlbeans
使用yamlbeans操作YAML,maven依赖:
<span style="white-space:pre"> </span><dependency>
<groupId>com.esotericsoftware.yamlbeans</groupId>
<artifactId>yamlbeans</artifactId>
<version>1.08</version>
</dependency>
java代码:
public class Yamlbeans {
public static void main(String[] args) throws Exception{
Contact contact = new Contact();
contact.name = "Nathan Sweet";
contact.age = 28;
YamlWriter writer = new YamlWriter(new FileWriter("/Contact1.yaml"));
writer.write(contact);
writer.close();
YamlReader reader = new YamlReader(new FileReader(" /Contact.yaml"));
Map<String,Contact> contact = reader.read(Map.class);
System.out.println(contact.size());
YamlWriter writer = new YamlWriter(new FileWriter(" /Contacts2.yaml"));
writer.write(contact);
writer.close();
}
}
Contact.yaml:
friends:
- !com.example.Contact
name: Bob
age: 29
phoneNumbers:
- !com.example.Phone
name: Home
number: 206-555-1234
- !com.example.Phone
name: Work
number: 206-555-5678
- !com.example.Contact
name: Mike
age: 31
phoneNumbers:
- !com.example.Phone
number: 206-555-4321
enemies:
- !com.example.Contact
name: Bill
phoneNumbers:
- !com.example.Phone
name: Cell
number: 206-555-1234
2、使用SnakeYaml
使用SnakeYaml操作yaml,maven依赖:
<span style="white-space:pre"> </span><dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.11</version>
</dependency>
java代码:
public class SnakeYaml {
public static void main(String[] args){
DumperOptions options = new DumperOptions();
options.setWidth(1000);
options.setIndent(5);
Yaml yaml = new Yaml();
try {
Map<String,Contact> contactMap = yaml.loadAs(new FileInputStream("/Contacts.yaml"),Map.class);
System.out.println(contactMap);
String result = yaml.dump(contactMap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
参考: