YAML简单入门

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


参考:

    1、http://www.yaml.org/spec/1.2/spec.html#application//

    2、http://www.yaml.org/

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值