目录

1.基本语法

2.数据类型

3.YAML 对象

4.YAML 数组

5.YAML 复合结构

6.YAML 纯量

7. 引用


1.基本语法

1)大小写敏感

2)缩进表示层级关系

3)缩进只允许空格,不能使用tab

4)缩进空格数没有要求,相同层级元素左对齐即可

5)# 注释

6)配置文件后缀为 .yml

2.数据类型

1)对象:键值对集合,又称映射、哈希、字典

2)数组:一组按次序排列的值,又称序列、列表

3)纯量:scalars,单个的、不可再分的值

3.YAML 对象

1)键值对结构 key: value,冒号:后加一个空格

2)key:{key1: value1, key2: value2, ...}

3)缩进格式 层级关系

key:
  key1: value1
  key2: value2

4)复杂对象格式

?  
    - complexkey1
    - complexkey2
:
    - complexvalue1
    - complexvalue2

使用问号加一个空格代表一个复杂的 key,配合一个冒号加一个空格代表一个 value;

即对象的属性是一个数组 [complexkey1,complexkey2],对应的值也是一个数组 [complexvalue1,complexvalue2]

4.YAML 数组

1)以 - 开头的行表示构成一个数组:

- A
- B
- C
- D

# 相当于:['A','B','C','D']

2)支持多维数组,可以使用行内表示:

key: [value1, value2, ...]

转化为python:

{data: [red,blue, ...]}

# 转为python {data: ['red','blue', ...]}

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

-
 - A
 - B
 - C

# 相当于[['A','B','C']]
datas:
    -
        id: 1
        name: company1
        price: 200W
    -
        id: 2
        name: company2
        price: 500W

# 相当于 datas: [{id: 1,name: company1,price: 200W},{id: 2,name: company2,price: 500W}]

5.YAML 复合结构

对象+数组:

languages:
  - Ruby
  - YAML
  - Python 
websites:
  YAML: yaml.org 
  Ruby: ruby-lang.org 
  Python: python.org

YAML转换为JSON:

{ 
  languages: ['Ruby', 'YAML', 'Python'],
  websites: {
    YAML: 'yaml.org',
    Ruby: 'ruby-lang.org',
    Python: 'python.org'
  } 
}

6.YAML 纯量

1)纯量是最基本的,不可再分的值,包括:字符串、布尔值、整数、浮点、NULL、时间、日期

boolean: 
    - TRUE  # true,True都可以
    - FALSE  # false,False都可以
float:
    - 3.14
    - 6.8523015e+5  # 可以使用科学计数法
int:
    - 123
    - 0b1010_0111_0100_1010_1110    # 二进制表示
null:
    nodeName: 'node'
    parent: ~  # 使用~表示null
string:
    - 哈喽
    - 'Hello world'  # 可以使用双引号或者单引号包裹特殊字符
    - "Hello world"
    - newline
      newline2    # 字符串可以拆成多行,每一行会被转化成一个空格
date:
    - 2022-12-08    # 日期必须使用ISO 8601格式,即yyyy-MM-dd
datetime: 
    -  2022-12-08T15:02:31+08:00    # 时间使用ISO 8601格式,时间和日期之间使用T连接,最后使用+代表时区

7. YAML 字符串

1)字符串默认不用引号表示

str:这是字符串类型

# 转为JavaScript  { str:'这是字符串类型' }

2)字符串之中包含空格或特殊字符,需要加引号

str:'类型:字符串'

# 转为JavaScript  { str:'类型:字符串' }

3)单引号和双引号都可以使用,双引号不会对特殊字符转义

str1:'类型1\n字符串'
str2:"类型2\n字符串"

# 转为JavaScript  { str1:'类型1\\n字符串',str2:'类型2\n字符串' }

4)单引号之中如果还有单引号,必须连续使用两个单引号转义

str1:'It''s a nice day'

# 转为JavaScript  { str1:'It\'s a nice day' }

5)字符串换行,从第二行开始,必须有一个单空格缩进,换行符会转为空格

str:这是
  一段
  多行字符串

# 转为JavaScript  { str:'这是 一段 多行字符串' }

6)多行字符串可以使用|保留换行符,也可以使用>折叠换行

this: |
  Foo
  Bar
that: >
  Foo
  Bar

# 转为JavaScript  { this: 'Foo\nBar\n', that: 'Foo Bar\n' }

7)+表示保留文字块末尾的换行,-表示删除字符串末尾的换行

s1: |
  Foo

s2: |+
  Foo


s3: |-
  Foo

# 转为JavaScript  { s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

8)字符串之中可以插入 HTML 标记

message: |

  <p style="color: red">
    段落
  </p>

#  转为JavaScript  { message: '\n<p style="color: red">\n  段落\n</p>\n' }

8. 引用

1)& 锚点和 * 别名,可以用来引用

如:& 用来建立锚点(defaults),<< 表示合并到当前数据,* 用来引用锚点

defaults: &defaults
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  <<: *defaults

test:
  database: myapp_test
  <<: *defaults

相当于:

defaults:
  adapter:  postgres
  host:     localhost

development:
  database: myapp_development
  adapter:  postgres
  host:     localhost

test:
  database: myapp_test
  adapter:  postgres
  host:     localhost

2)

- &showell Steve 
- Clark 
- Brian 
- Oren 
- *showell

相当于:

[ 'Steve', 'Clark', 'Brian', 'Oren', 'Steve' ]