Yaml 语法
编程免不了要写配置文件,怎么写配置也是一门学问。YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便
YAML 语言的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式
基本语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进是不使用 tab 键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级左侧的元素对其即可
- " # " 表示注释,从这个字符一直到行尾都会被解释器忽略
数据类型
对象类型:对象是一组键值对,使用冒号结构表示
name: zhangsan
hash: {name: zhangsan, age: 18}
数组类型:一组连词线开头的行,构成一个数组
-
- zhangsan
- lisi
- wangwu
{name: ['zhangsan', 'lisi', 'wangwu']}
复合结构:对象和数组可以结合使用,形成复合结构
languages => ['Ruby', 'Perl', 'Python']
languages:
- Ruby
- Perl
- Python
name => zhangsan
name: zhangsan
website.YAML => yaml.org
websites:
YAML: yaml.org
Ruby: ruby-lang.org
Python: python.org
Perl: use.perl.org
纯量:纯量是最基本的、不可再分的值
-
字符串
# 字符串默认不使用引号表示 (yaml是基于UTF-8编码的) str: 这是一行字符串 # 如果字符串之中包含空格或特殊字符,需要放在引号之中 str: '内容: 字符串' #表示定义一个字符串为:(单引号中所有内容) # 单引号和双引号都可以使用,双引号不会对特殊字符转义 s1: '内容\n字符串' #表示定义s1为: 内容 字符串 s2: "内容\n字符串" #表示定义s2为: 内容\n字符串 # 单引号之中如果还有单引号,必须连续使用两个单引号转义 str: ' '' ' 例: str: ' xx let''s go ' #表示定义字符串为:xx let's go-
拓展
# YAML 允许使用两个感叹号,强制转换数据类型 e: !!str 123 #将 123 转换为 "123" ↑ ↑ 数值型 字符串型 ↓ ↓ f: !!str true #将 true 转换为 "true" 拓展:(注意区分数值类型,布尔值类型,字符串类型的,底层存储不一样) 数据类型 数值类型 123 12.30 123 翻译成二进制 布尔值类型 true false true 1 false 0 字符串类型 今天天气真好 "123" "true" ['1', '2', '3'] '1' 翻译成二进制 '2' 翻译成二进制 '3' 翻译成二进制 # 字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格(换行符会被转换为空格) str: 这是一段 #定义一个字符串为: 这是一段 多行 字符串 多行 字符串 ## { str: '这是一段 多行 字符串' } # 多行字符串可以使用|保留换行符,也可以使用>折叠换行 | 保留换行符 #所有换行符都保留 > 折叠换行 #仅保留最后一个换行符,其他的换行符转换为空格 this: | #定义this字符串为: Foo Foo Bar Bar | that: > #定义that字符串为: Foo Foo Bar Bar | ## { this: 'Foo\nBar\n', that: 'Foo Bar\n' } # +表示保留文字块末尾的换行,-表示删除字符串末尾的换行 |+ 表示:保留所有的换行 |- 表示:删除所有的换行 s1: | #定义s1字符串为: Foo Foo | s2: |+ #定义s2字符串为: Foo Foo | | | s3: |- #定义s3字符串为: Foo Foo ## { s1: 'Foo\n', s2: 'Foo\n\n\n', s3: 'Foo' } # 锚点&和别名*,可以用来引用 锚点&:定义重复的内容 别名*:调用重复的内容 (√) defaults: &defaults =》 development: adapter: postgres =》 database: myapp_development host: localhost =》 adapter: postgres =》 host: localhost development: =》 test: database: myapp_development =》 database: myapp_test <<: *defaults =》 adapter: myapp_test =》 host: localhost test: =》 database: myapp_test =》 <<: *defaults =》 -
-
布尔值
# 布尔值用 true 和 false 表示 isset: true -
整数
# 数值直接以字面量的形式表示 number: 12 -
浮点数
# 数值直接以字面量的形式表示 number: 12.30 -
Null
# null 用 ~ 表示 parent: ~ (表示此项为空) parent: (表示此项为默认值) -
时间
# 时间采用 ISO8601 格式 iso8601: 2001-12-14t21:59:43.10-05:00 -
日期
# 日期采用复合 iso8601 格式的年、月、日表示 date: 1976-07-31 (注意:月、日用两位数表示)