YAML语法

Admin 2018-09-25 12:42:29 其他

YAML是专门来写配置文件的语言,远比JSON要方便,正如YAML表示的YAML Ain't Markup Language。YAML是一种简洁的非标记语言,以数据为中心,使用空白、缩进、分行组织数据,从而表示的更加简洁易读。

官网地址:http://yaml.org/

一个在线演示站点:http://nodeca.github.io/js-yaml/

基本规则

  1. 大小写敏感

  2. 使用缩进表示层级关系

  3. 禁止tab缩进,只能使用空格键

  4. 缩进长度没有限制,只要元素对其就表示这些元素属于一个层级

  5. 使用#表示注释

  6. 字符串可以不用引号

数据结构

散列表(map或对象)

使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,如:

# YAML表示
age : 12
name : huang

# 对应的Json表示
{'age':12,'name':'huang'}

也可以写成一行

# YAML表示
{age:12,name:huang}
# 对应的Json表示
{'age':12,'name':'huang'}

数组(list)

使用连字符(-)表示,如:

# YAML表示
- a
- b
- 12
# 对应Json表示
['a','b',12]

也可以写成一行

# YAML表示
[a,b,c]
# 对应Json表示
[ 'a', 'b', 'c' ]

纯量(scalar)

数据最小的单位,不可以在分割,如:

  • 字符串

  • 布尔值

  • Null 用 ~ 表示

  • 浮点数

强制转换类型

e: !!str 123   #整数转字符
f: !!str true  #布尔值转字符

多行字符串可以使用|保留换行符,可以使用>折叠换行,如:

this: |
  Foo
  Bar
that: >
  Foo
  Bar

{ this: 'Foo\nBar\n', that: 'Foo Bar\n' }

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

s1: |
  Foo

s2: |+
  Foo


s3: |-
  Foo

{ s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' }

字符串之中可以插入HTML标记,如:

message: |

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

锚点&和别名*,可以用来引用,如:

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

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

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

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

数据嵌套

map和list的元素可以是另一个map或list或者是纯量,由此出现4种常见的嵌套:

  1. map嵌套map

  2. map嵌套list

  3. list嵌套list

  4. list嵌套map

举一个列子,list嵌套map,如:

# YAML表示
-  id: 1
  name: huang
-  id: 2
  name: liao

# 对应Json表示
[ { id: 1, name: 'huang' }, { id: 2, name: 'liao' } ]
相关文章
最新推荐