目录

Yaml

参考:






概述

YAML: YAML Ain’t Markup Language. YAML is a human friendly data serialization standard for all programming languages.


YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列的格式。YAML是"YAML Ain’t a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML的意思其实是:“Yet Another Markup Language”(仍是一种标记语言,但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

YAML是专门用来写配置文件的语言,非常简洁和强大,远比JSON格式方便。


YAML的特点:

  • YAML数据可在编程语言之间移植
  • 包括数据一致的数据模型
  • 人类易于阅读
  • 支持单向处理
  • 易于实现和使用





语法规则

基本语法规则如下:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可(一般2个或4个)
  • #表示单行注释,不支持多行注释。多行注释请使用多个#
  • 具有单个流的多个文档用3个连字符(---)分隔
  • 阻止列表项包括与周围块级相同的缩进,因为-符号被视为缩进的一部分





格式

YAML支持三种格式:

  • 对象:键值对的集合,又称为映射(mapping)/哈希(hashes)/字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence)/列表(list)
  • 纯量值(scalars):单个的、不可再分的值
1
2
3
4
5
6
7
#栗子


- key1: value1
- key2: value2

#一个列表,两个对象,四个纯量


对象

对象是一组键值对,使用冒号结构表示。

1
2
3
4
5
key: vaule


#Yaml也允许另一种写法,将所有键值对写成一个行内对象。
hash: { name: Steve, foo: bar }


数组

又称为列表或序列。

1
2
3
4
5
6
7
- list
- sequence
- array


#数组也可以采用行内表示法。
animal: [list, sequence, array]

数据结构的子成员是一个数组,则可以在该项下面缩进一个空格。

1
2
3
4
-
 - Cat
 - Dog
 - Goldfish


纯量值

纯量是最基本的、不可再分的值。

- 字符串 - 布尔值 - 整数 - 浮点数 - Null - 时间 - 日期



复合结构

对象和数组可以结合使用,形成复合结构。

1
2
3
4
5
6
7
8
9
languages:
 - Ruby
 - Perl
 - Python
websites:
 YAML: yaml.org
 Ruby: ruby-lang.org
 Python: python.org
 Perl: use.perl.org





特殊符号

  • ---: 表示文档开始;分割不同内容
  • ...---的配合使用: 在一个配置文件中代表一个文件的结束
  • !!: 类型强行转换
  • >: 在字符串中折叠换行
  • |: 保留换行符
  • 引用
    • &: 完成锚点定义
    • *: 完成锚点引用
  • 合并内容: 主要和锚点配合使用,可以将一个锚点内容直接合并到一个对象中

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#栗子

---
Time: 2018-07-17T15:02:31+08:00
User: ed
Warning:
     This is an error message for the log file
---
Time: 2018-07-17T15:05:21+08:00
User: ed
Warning:
    A slightly different error message.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#栗子
---
time: 20:03:20
player: Sammy Sosa
action: strike (miss)
...
---
time: 20:03:47
player: Sammy Sosa
action: grand slam
...

1
2
3
string:
    - !!str 54321
    - !!str true