yaml
YAML 简介
发音 ‘jæməl’ 是一种表达数据结构的语言,可以配合目前大部分的语言进行使用,不同于 xml 用嵌套的方式和
json 用{}大括号[]方括号的方式,采用类似 python 的空格缩进方式,是一种极简的方式进行描述数据结构,可以用
.yaml 或 .yml 进行结尾。
yaml 官方网站
yaml 语法在线校验1
yaml 语法在线校验2
官方有提供 java 的库 snakeyaml 来操作 .yml 文件的读取和写入.
基本语法
- 大小写敏感
- 使用缩进表示层级关系,缩进的空格数不重要,只要相同层级的元素能够对齐就行
- 不要使用 Tab 代替空格,因为在不同的操作系统 Tab 表示的空格个数不能,导致层次混乱
- /# 开头的是注释
数据结构
对象
表示以键值对(key: value)形式出现的数据, 使用“冒号+空格”来分开键与值
如果省略冒号(:)后面的空格 key:value 表示的是一个字符串 “key:value”,空格的数量没有限制,默认一个空格就好
1
key: value
多层嵌套(用缩进表示层级关系)
1 | key: |
相应的 json
1 | { |
如果没有使用缩进代表层级关系,如下的数据转换成 json 是
{“key”: null,”child-key1”: “value1”,”child-key2”: “value2”}
1 | key: |
或用流式风格( Flow style)的语法(用花括号包裹,用逗号加空格分隔,类似 JSON)
但是在冒号(:)后要有空格分隔
1
key: { child-key1: value1, child-key2: value2 }
数组
一组以区块格式(Block Format)(破折号(-)+空格)开头的数据组成一个数组
空格不能省略,空格数量没有限制,默认一个. 破折号可以和 key 对齐,默认缩进破折号.
同一级的破折号要对齐.
1
2
3
4values:
- value1
- value2
- value3
如下省略空格,数据会被转换为{“values”: “-value1 -value2 -value3”}
1
2
3
4values:
-value1
-value2
-value3
或 内联格式(Inline Format)来表达(用方括号包裹分隔)
1 | values: [value1,value2,value3] |
支持多维数组(用缩进表示层级关系)
1 | values: |
或内联格式(Inline Format)来表达(用方括号包裹,逗号加空格分隔)
1
values: [[value1,value2],[value3,value4]]
字面量
纯量是最基本的、不可再分的值。以下数据类型都属于 JavaScript 的纯量
布尔值(Boolean)
- true、True、TRUE、yes、Yes和 YES 皆为真
- false、False、FALSE、no、No 和 NO 皆为假
整数或浮点数表示
1 | int: |
空(Null)
null、Null 和 ~ 都是空,不指定值默认也是空
字符串
字符串默认不使用引号表示
如果字符串之中包含空格或特殊字符,需要放在引号之中。
1 | str: '内容: 字符串' |
单双引号的区别
单引号,则会转义特殊字符,会把特殊字符转义后作为字符输出
a \\n b
1
name: 'a \n b'
双引号,则不会转义特殊字符,特殊字符会输出为其本身想表达的转义含义
a \n b
1
name: "a \n b"
数据重用与合并
数据重用
为了保持内容的简洁,避免过多重复的定义,YAML 提供了由锚点标签“&”和引用标签“*”组成的语法,利用这套语法可以快速引用相同的一些数据
1 | a: &anchor # 设置锚点 |
转换为json
1 | "a": { |
数据合并
1 | human: &base # 添加名为 base 的锚点 |
数据类型转换
yaml 允许使用两个感叹号,强制转换数据类型.
1 | a: !!str 123 |
转换后的 json
1 | { |
注意事项
重复定义的key 后面的会覆盖前面的
1 | a: b |
转换为json
1 | { |