GX博客

分享个人 Full-Stack JavaScript 项目开发经验

YAML详细介绍

YAML 是在 Web 开发中常用的数据序列化语言,如 Swagger 的接口说明、Docker Compose 和 kubernetes 的配置文件都使用到 YAML。本文旨在将 YAML 的语法作一个精简的归纳。


在开始下面语法介绍之前,你可以先通过 yarn 安装转换工具,然后将其添加到 node.js 的 REPL 解释器中进行测试:

yarn add yaml
要了解 node.js 的 REPL 解释器的使用,可以参阅Node.js交互式解释器REPL简介

目录


YAML的语言特征

  • 匹配如 Perl、Python、PHP、Ruby 和 JavaScript 等语言的原生数据结构。
  • YAML 数据可在编程语言之间移植。
  • 使用一致的数据模型。
  • 易于阅读。

YAML的基本规则

  • YAML 区分大小写。
  • 文件应以 .yaml 为扩展名。
  • 不允许使用制表符缩进,使用空格代替。
  • 使用缩进范围的块集合,每个条目都以新行开头。
  • YAML 使用三种节点表示数据结构:序列、映射和标量。

YAML的基本元素

  • 注释以(#)字符开头,不支持多行注释。注释不能出现在标量内。YAML 不包含任何转义 # 的方法,所以无法将注释与原始字符串值分开。
  • 序列成员块格式,以(- )开头。
  • 序列成员内联格式,括在方括号([])中,并以(, )分隔。
  • 映射键值对使用(: )分隔。折叠格式中使用大括号({})括起来。
  • 文档使用(---)开始,使用(...)结束。

YAML的标量

标量用来代表字符串、数字、日期等的标准值。

块标量使用(|)表示,它会将其中的换行符包含在内:

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

YAML的序列和映射

常规块格式序列:

- banana
- apple
- orange

内联格式序列:

[banana, apple, orange]

常规映射键值对:

- name: sing
  age: 18

映射的折叠格式:

- {name: sing, age: 18}

值得一提,序列是按顺序的,映射必须保证键值唯一。


YAML的指示符

集合指示符

指示符说明例子
-表示一个块序列条目
- apple
- orange
?表示一个映射的键
? key
: value
:表示一个映射的值
key: value
,用于分隔内联条目
array: [a, b, c]
[]用于包裹序列
array: [a, b, c]
{}用于包裹内联映射
info: {name: sing}

标量指示符

指示符说明例子
''用于引用未转义的标量,除单引号自身。
unescaped: '\'
""用于引用已转义的标量
escaped: "\x12"
|表示块标量
multi_lines: |
 this is a
 long value
>表示折叠标量
multi_lines: >
 this is a
 long value
+在块标量或折叠标量最后添加换行符
strip: >+
  text
-在块标量或折叠标量最后移除换行符
strip: >-
  text

别名指示符

指示符说明例子
&表示节点的锚点属性
defaults: &defaults
   path: your_path
   port: 3000

development:
   host: your_host_name
   <<: *defaults
*表示别名节点
config:
   port: &port 3000

development:
   port: *port
<<表示混合另一个映射的键值同 & 例子

文档指示符

指示符说明例子
%表示使用的命令
%YAML 1.1
---
  value: 18
...
---表示文档的开始同上
...表示文档的结束同上

YAML的节点属性

YAML 中每个节点包括锚点和标签两个特征。

%YAML 1.1
---
!!map {
   ? &A1 !!str "key"
   : &A2 !!str "value",
   ? !!str "key2"
   : *A1,
   ? !!str "key3"
   : *A2
}

上面例子中,展示了 A1 和 A2 两个锚点,并使用了默认的 !!str 标签。

核心的标签类型包括:

标签说明
!!map映射标签
!!seq序列标签
!!strUnicode 字符串标签

要了解其它非常用的 YAML 1.1 语法,请点击这里
文章关键字:YAML数据序列化语言

版权声明:

本文为博主原创文章,若需转载,须注明出处,添加原文链接。

https://leeguangxing.cn/blog_post_79.html