本篇介绍 YAML 的语法,包括以下部分:
YAML 简介
规范
数据结构
YAML 简介
YAML 是一个类似 XML、JSON 的标记性语言。YAML 强调以数据为中心,并不是以标识语言为重点。因而 YAML 本身的定义比较简单,号称“一种人性化的数据格式语言”。实质上是一种通用的数据串行化格式,专门用于写配置文件。
YAML 与 XML、JSON 的区别: YAML 比 XML 和 JSON 都简单,易阅读,并且能表示出更加复杂的结构,运行效率也很高。
规范
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不能使用 Tab 键,只能用空格
- 缩进空格数不重要,只要相同层级左侧对齐即可(类似 Python)
#
表示注解
数据结构
- 对象:键值对的集合
- 数组:按次序排列的值,也称序列、列表
- 纯量:单个,不可再分的值
对象
通过冒号分隔键、值person: zhangsan
也可通过行内表示法,写成行内对象person: { name: zhangsan, age: 20 }
数组
一组连词线开头的行,构成一个数组
- zhangsan |
也可通过行内表示法 person: [zhangsan, lisi, wangwu]
复合结构
对象和数组可以结合使用,形成复合结构。
- 对象嵌套对象
age: |
- 对象嵌套数组
lang: |
- 数组嵌套数组
数据结构的子成员是一个数组,则可以在该项下面缩进一个空格,yaml 语法会自动只空一格
- |
- 数组嵌套对象
- id: 1 |
- 综合实例
ports: |
纯量
纯量的数据类型与 js 相同
- 字符串
- 布尔值
true
和false
- 整数
- 浮点数
- Null
~
- 时间:采用 ISO8601 标准
time: 2018-04-29T17:30:08+08:00
- 日期:采用 ISO8601 标准
date: 2018-04-29
integer: 12345 # 整数标准形式 |
YAML 允许使用两个感叹号,强制转换数据类型
下面是可转换的类型(内置类型) |
例: |
字符串
字符串默认不使用引号表示
str: hello |
如果字符串之中包含空格或特殊字符,需要放在引号之中。
str: "hello,world" |
单引号和双引号都可以使用,双引号不会对特殊字符转义。
str1: "hello\n" #会将\n识别为换行 |
字符串可以写成多行,从第二行开始,必须有一个单空格缩进。换行符会被转为空格。
str: 这是 |
多行字符串可以使用|
保留换行符,也可以使用>
折叠换行。
str1: | |
+
表示保留文字块末尾的换行,-
表示删除字符串末尾的换行。
s1: | |
字符串之中可以插入 HTML 标记。
page: | |
引用
锚点&
和别名*
,可以用来引用。&
用来建立锚点(defaults),<<
表示合并到当前数据,*
用来引用锚点。
student: &stu # &用于起别名 |
文件
YAML 文件可以由一或多个文档组成(也即相对独立的组织结构组成),文档间使用---
在每文档开始作为分隔符。同时,文档也可以使用...
作为结束符(可选,但标明后会有利于网络上传输)。
|
参考文章:
YAML 语言教程-阮一峰 http://www.ruanyifeng.com/blog/2016/07/yaml.html
YAML 书写规范 http://www.cnblogs.com/wdliu/p/7080305.html
YAML 最最基础语法 https://blog.csdn.net/vincent_hbl/article/details/75411243
yaml1.2 官方文档 http://yaml.org/spec/1.2/spec.html