YAML 的具体语法,可以参考下面的资源链接。这里给一些快速的示例,以及描述 YAML 的能力。
YAML 目前主流是 1.2 版本(2009 年),1.3 版本在讨论中(2017 年开始)。
Scalar Types
Language Independent Scalar types:
{ ~, null } : Null (no value).
[ 1234, 0x4D2, 02333 ] : [ Decimal int, Hexadecimal int, Octal int ]
[ 1_230.15, 12.3015e+02 ] : [ Fixed float, Exponential float ]
[ .inf, -.Inf, .NAN ] : [ Infinity (float), Negative, Not a number ]
{ Y, true, Yes, ON } : Boolean true
{ n, FALSE, No, off } : Boolean false
2001-12-14t21:59:43.10-05:00 : Date time value in ISO8601
1976-07-31 : Date value in ISO8601
"Hello\nWorld" : String literal with escaping (\n would be turned into new line)
'Hello\nWorld' : String literal without escaping
强制类型转换 !!
:
e: !!float 123
f: !!str true
Basics
Array:
- apple
- banana
- carrot
Hash:
foo: whatever
bar: stuff
Complex mixed mapping:
foo: whatever
bar:
-
fruit: apple
name: steve
sport: baseball
- more
-
python: rocks
perl: papers
ruby: scissorses
In Ruby:
{ 'foo' => 'whatever',
'bar' => [
{
'fruit' => 'apple',
'name' => 'steve',
'sport' => 'baseball'
},
'more',
{
'python' => 'rocks',
'perl' => 'papers',
'ruby' => 'scissorses'
}
]
}
Flow Mode (Inline Mode)
seq:
- a
- b
- c
# The same with above
seq: [a, b, c]
hash:
name: Steve
foo: bar
# The same with above
hash: { name: Steve, foo: bar }
多行字符串,用 |
>
两个符号,规则啰嗦,不展开讲。一般来说用 |
会保留你的换行,>
倾向于合并。看看 StackOverflow 的 回答。
&
, <<
可以用来合并一个 mapping 到另外一个 mapping。
一般 YAML 文件格式中会带个头 %YAML 1.2
,---
作开始,...
作结尾。但是这些符号可有可无,parser 一般不作强制要求:
%YAML 1.2
---
# Your content
...
工具
- Online YAML Parser 提供了一个 YAML 的 playground,有不确定的语法时在这上面试试
参考
- YAML 语言教程 - 阮一峰:阮一峰这个教程很不错,推荐
- Yaml Cookbook:提供了很多典型的 YAML 用例,推荐
- YAML Syntax - Ansible:写了一些 YAML 的陷阱(gotchas)
- YAML 1.1 Reference Card
- YAML Official Site