分享个人 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 语法,请点击这里。