一、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>
- 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();
- }
- }
- }