YAML 是一种简洁的非标记语言(YAML Ain’t Markup Language),YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读, 经常使用于做为配置文件, 比json更加简洁。json
一、JSON 能够看做是 YAML 的子集,也就是说 JSON 可以作的事情,YAML 也可以作数组
二、YAML 能表示得比 JSON 更加简单和阅读,例如“字符串不须要引号”。因此 YAML 容易能够写成 JSON 的格式,但并不建议这种作数据结构
三、YAML 可以描述比 JSON 更加复杂的结构,例如“关系锚点”能够表示数据引用(如重复数据的引用)spa
k: v:字面直接来写设计
字符串默认不须要加单引号或者双引号,若是加双引号,它不会转义字符串里面的特殊字符,而加单引号,则会转义字符串里面的特殊字符,意思就是将特殊字符直接变为字符串输出。code
一、对象、map集合(键值对):冒号分隔键值对(Key: Value), Key须要顶格写,前面不能有空格,冒号后面须要有一个空格而后再跟值, 相同的缩进属于同一个map ,好比:对象
# 对象:缩进方式 obj: field1: x field2: S # 对象:行内方式 obj: {field1: x,field2: s}
二、数组(List、set):一组按次序排列的值,又称为序列(sequence) / 列表(list)。好比:ip
# 数组:连字符方式,若是元素也是数组就再使用一层缩进 array: - ele1 - ele2 # 数组:行内方式 array: [elel,ele2]
复杂属性之间能够嵌套文档
--- # 使用冒号:表示键值对, 冒号后面须要有一个空格, key须要顶格写,前面不能有空格 同一缩进的全部键值对属于一个map str: 这是一行字符串 # 字符串默认不使用引号表示 str2: '内容: 字符串' # 若是字符串之中包含空格或特殊字符,须要放在引号之中 str3: '内容\n字符串' # 单引号和双引号均可以使用,双引号不会对特殊字符转义 str4: "内容\n字符串" # 双引号对特殊字符不转义 str5: 'labor''s day' # 单引号之中若是还有单引号,须要使用单引号转义 # 字符串能够写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格 str6: 这是一段 多行 字符串 str7: | # "|"表示每行末尾都跟一个换行符 Foo Bar str8: > # “>” 最后一行跟一个换行符 Foo Bar str9: | Foo str10: |+ # +表示保留文字块末尾的换行 Foo str11: |- # -表示删除字符串末尾的换行 Foo str12: | # 字符串之中能够插入 HTML 标记 <p style="color: red"> 段落 </p> int: 10 float: 9.99 bool: true # true、false # 时间采用 ISO8601 格式 1点被转成9点 date: 2015-08-23 # 日期 datetime: 2015-08-23T02:02:00.1z # 日期时间 iso8601: 2015-08-23t21:59:43.10-05:00 # iso8601 日期格式 spaced: 2015-08-23 21:59:43.10 -5 # # 对象:缩进方式 obj: field1: x field2: field21: xx field22: xxx # 对象:行内方式(和json格式差很少) obj2: { field1: 'x', field2: { field21: 'xx', field22: 'xxx' } } # 数组:连字符方式,若是元素也是数组就再使用一层缩进 array: - ele1 - ele2 - - ele31 - ele32 # 行内方式 array2: [ 'ele1', 'ele2', [ 'ele31', 'ele32' ] ] # 数组中的原始是对象 array3: - field1: x field2: xx field3: xxx - field1: x field2: xx field3: xxx set: ? ele ? ele2 # 嵌套方式 nested: field1: x arr: - {field1: x, field2: x, field3: [1, 2, 3]} - {field1: x, field2: x, field3: [2, 3, 4]} arr2: - - a - b - - c - c # 类型转换: 使用两个感叹号跟要转换的基本数据类型,单引号:用于转换自定义对象 #下面是内置类型 #!!int # 整数类型 #!!float # 浮点类型 #!!bool # 布尔类型 #!!str # 字符串类型 #!!binary # 也是字符串类型 #!!timestamp # 日期时间类型 #!!null # 空值 #!!set # 集合 #!!omap, !!pairs # 键值列表或对象列表 #!!seq # 序列,也是列表 #!!map # 键值表 test: !!str 123 # 当键是数组或者对象时须要使用问号来标记 ?[blue, reg, green]: xxx ?{a:xx, b:xx}: xx # 锚点和引用 ref: - &index1 a - b - *index1 ...
若是使用yml文件格式做为配置文件的话,那么还有一个好处,yml文件支持多文档块的方式,使用“---”便可,可将编辑的内容分为多个文档,“...”可做为文件的结尾。字符串