Yaml基本语法

后端 / 2020-08-09

什么是Yaml

YAML是"YAML Ain't a Markup Language"(YAML不是一种标记语言)的递归缩写。在开发的这种语言时,YAML 的意思其实是:"Yet Another Markup Language"(仍是一种标记语言),但为了强调这种语言以数据做为中心,而不是以标记语言为重点,而用反向缩略语重命名。

基本语法

  • 对大小写敏感
  • 通过缩表示关系
  • 不允许使用tab
  • #注释

对象

Yaml中对象的表现形式为key: value

person:
    name: luckyFang
    age: 21

这里需要注意的是,键值対 键和值 中间有空格

错误示范:

buffer:
    size:5

上面的 size 这个 value 就不对。 应当改成 size: 5

数组

常规数组

menu:
    - apple
    - orange
    - banana

多维数组

menu:
    -
        id: 1
	name: apple
	price: 1.5
    -
        id: 2
	name: orange
	price: 2.5
    -
	id: 3
	name: banana
	price: 4.5

综合示例

languages:
    - java
    - python
    - go
    - c

configer:
    version: 1.8
    packgeType: jar

active:
    - dev
    - product
    - normal

纯量

原子性:最基本的不可再拆分。

  • string
  • boolean
  • number
  • double
  • null
  • datetime
  • date
boolean: 
    - TRUE 
    - FALSE
float:
    - 1.2
    - 1.23e+5
int:
    - 123
    - 0b01010110_10010011
null:
    nodeName: 'node'
    parent: ~  # ~ 表示null
string:
    - 你好
    - '你好 世界'  
    - line1
      line2    #字符串拆分多行后,每行替换成一个空格
date:
    - 2020-08-09
datetime: 
    -  2020-08-09T22:00:31+08:00

引用

& 锚点 * 别名 << 合并

# YAML
a: &flag # 锚点
  one: 1
  two: 2
  three: 3
b: *flag # 引用

// JSON
"a": {
  "one": 1,
  "two": 2,
  "three": 3
},
"b": {
  "one": 1,
  "two": 2,
  "three": 3
}
a: &flag
    one: 1
    two: 2
    three: 3
b:
    <<: *flag # 展开合并
    four: 4

等同于

a: &flag
    one: 1
    two: 2
    three: 3
b:
    one: 1
    two: 2
    three: 3
    four: 4