分享个人 Full-Stack JavaScript 项目开发经验
YAML 是在 Web 开发中常用的数据序列化语言,如 Swagger 的接口说明、Docker Compose 和 kubernetes 的配置文件都使用到 YAML。本文旨在将 YAML 的语法作一个精简的归纳。
在开始下面语法介绍之前,你可以先通过 yarn 安装转换工具,然后将其添加到 node.js 的 REPL 解释器中进行测试:
yarn add yaml要了解 node.js 的 REPL 解释器的使用,可以参阅Node.js交互式解释器REPL简介。
标量用来代表字符串、数字、日期等的标准值。
块标量使用(|)表示,它会将其中的换行符包含在内:
multi_lines: |
this is a
long value折叠标量使用(>)表示,它会将新行使用空格连接:
multi_lines: >
this is a
long value布尔值:
# yes、Yes、TRUE、True、true 均可
cache: yes
# no、No、FALSE、False、false 均可
auto_restart: no字符串:
string: 'hello'整数:
# 一般整数
integer: 12345
# 二进制
binary: 0b1110
# 八进制
octal: 014
# 十六进制
hexadecimal: 0xF浮点数:
# 一般浮点数
float: 1.2345
# 科学计数法
law: 1.23015e+3
# 负无限
negative infinity: -.inf
# 非数字
not a number: .NaN常规块格式序列:
- banana
- apple
- orange内联格式序列:
[banana, apple, orange]常规映射键值对:
- name: sing
age: 18映射的折叠格式:
- {name: sing, age: 18}值得一提,序列是按顺序的,映射必须保证键值唯一。
| 指示符 | 说明 | 例子 |
|---|---|---|
| - | 表示一个块序列条目 | |
| ? | 表示一个映射的键 | |
| : | 表示一个映射的值 | |
| , | 用于分隔内联条目 | |
| [] | 用于包裹序列 | |
| {} | 用于包裹内联映射 | |
| 指示符 | 说明 | 例子 |
|---|---|---|
| '' | 用于引用未转义的标量,除单引号自身。 | |
| "" | 用于引用已转义的标量 | |
| | | 表示块标量 | |
| > | 表示折叠标量 | |
| + | 在块标量或折叠标量最后添加换行符 | |
| - | 在块标量或折叠标量最后移除换行符 | |
| 指示符 | 说明 | 例子 |
|---|---|---|
| & | 表示节点的锚点属性 | |
| * | 表示别名节点 | |
| << | 表示混合另一个映射的键值 | 同 & 例子 |
| 指示符 | 说明 | 例子 |
|---|---|---|
| % | 表示使用的命令 | |
| --- | 表示文档的开始 | 同上 |
| ... | 表示文档的结束 | 同上 |
YAML 中每个节点包括锚点和标签两个特征。
%YAML 1.1
---
!!map {
? &A1 !!str "key"
: &A2 !!str "value",
? !!str "key2"
: *A1,
? !!str "key3"
: *A2
}上面例子中,展示了 A1 和 A2 两个锚点,并使用了默认的 !!str 标签。
核心的标签类型包括:
| 标签 | 说明 |
|---|---|
| !!map | 映射标签 |
| !!seq | 序列标签 |
| !!str | Unicode 字符串标签 |
要了解其它非常用的 YAML 1.1 语法,请点击这里。