YAML Ain't Markup Language
Yet Another Markup Language
基本语法
大小写敏感
用缩进表示层级关系
用 # 表示注释
数据结构与类型
对象
使用“冒号+空格”来分开键与值
# YAML
key: value
// JSON
"key": "value"
支持多层嵌套(用缩进表示层级关系)
# YAML
key:
child-key1: value1
child-key2: value2
// JSON
"key": {
"child-key1": "value1",
"child-key2": "value2",
}
支持**流式风格( Flow style)**的语法(用花括号包裹,用逗号加空格分隔,类似 JSON)
# YAML
key: { child-key1: value1, child-key2: value2 }
// JSON
"key": { "child-key1": "value1", "child-key2": "value2" }
- 使用**问号“?”**声明一个复杂对象,允许你使用多个词汇(数组)来组成键
# YAML
?
- keypart1
- keypart2
:
- value1
- value2
// JSON
{
"keypart1,keypart2": [
"value1",
"value2"
]
}
数组
一组以**区块格式(Block Format)(即“破折号+空格”)**开头的数据组成一个数组
# YAML
values:
- value1
- value2
- value3
// JSON
"values": [ "value1", "value2", "value3" ]
同时也支持**内联格式(Inline Format)**来表达(用方括号包裹,逗号加空格分隔,类似 JSON)
# YAML
values: [value1, value2, value3]
// JSON
"values": [ "value1", "value2", "value3" ]
支持多维数组(用缩进表示层级关系)
# YAML
values:
-
- value1
- value2
-
- value3
- value4
// JSON
"values": [ [ "value1", "value2"], ["value3", "value4"] ]
标量
- 字符串一般不需要用引号包裹,但是如果字符串中使用了反斜杠“\”开头的转义字符就必须使用引号包裹
- true”、“True”、“TRUE”、“yes”、“Yes”和“YES”皆为真
- false”、“False”、“FALSE”、“no”、“No”和“NO”皆为假
- “null”、“Null”和“~”都是空,不指定值默认也是空
- 整数支持二进制表示
- 浮点数支持科学计数法
类型转换
YAML 支持使用严格类型标签“!!”(双感叹号+目标类型)来强制转换类型
# YAML
a: !!float '666' # !! 为严格类型标签
b: '666' # 其实双引号也算是类型转换符
c: !!str 666 # 整数转为字符串
d: !!str 666.66 # 浮点数转为字符串
e: !!str true # 布尔值转为字符串
f: !!str yes # 布尔值转为字符串
// JSON
"a": 666,
"b": "666",
"c": "666",
"d": "666.66",
"e": "true"
"f": "yes"