从此
文章
📄文章 #️⃣专题 🌐上网 📺 🛒 📱

YAML配置文件语法+缩进示例

🕗2024-03-09

YAML(Yet Another Markup Language)另一种标记语言。

YAML 是一种较为人性化的数据序列化语言,可以配合目前大多数编程语言使用。YAML 的语法比较简洁直观,特点是使用空格来表达层次结构,其最大优势在于数据结构方面的表达,所以 YAML 更多应用于编写配置文件,其文件一般以 .yml 为后缀

特点:

YAML 的使用场景包括但不限于:应用程序的配置、数据交换格式、文档撰写、自动化脚本、云计算和服务编排等等。

1.1 基本语法

# YAML
one:
  two: 2
  three:
    four: 4
    five: 5

// 转成 JSON 后的格式
"one": {
  "two": 2,
  "three": {
    "four": 4,
    "five": 5 
  }
}

 
# 我是一行注释
 
# 我是另一行注释

每个文档均以“---”三个横杠开始,如果一个文件中仅一个文档,则可省略

每个文档并不必须使用结束符“...”来表示结束,但是对于网络传输或者流来说,作为明确结束的符号,有利于软件处理。(例如,不需要知道流关闭就能知道文档结束)

---
# 这是第一份文档内容
one: 1
# 其他内容...
...
 
---
# 这是第二份文档内容
two: 2
# 其他内容...

 

1.2 数据结构与类型

1.2.1 对象 Mapping

标识以键值对(key: value)形式出现的数据。

在键和值中间加入标识,冒号+空格(: )

# YAML

key: value

 

// JSON
{
    "key": "value"
}

 

缩进表示层级关系

# YAML
key:
  child-key1: value1
  child-key2: value2

// JSON
{
    "key": {
      "child-key1": "value1",
      "child-key2": "value2",
    }
}

 

键值对之间用逗号+空格(, )分隔,类似 JSON。

# YAML
key: { child-key1: value1, child-key2: value2 }

// JSON
{
    "key": {
        "child-key1": "value1",
        "child-key2": "value2"
    }
}

 

1.2.2 数组 Sequence

# YAML 区块格式(Block Format)
values:
 - value1
 - value2
 - value3
# YAML 内联格式(Inline Format)
values: [value1, value2, value3]

 

1.2.3 标量 Scalars 基本数据类型-str、bool、int、float、null、datetime...

本章节包含以下部分简介:字符串 String、布尔值 boolean、整数 Integer、浮点数 Float、空 Null、日期时间 datetime、类型强制转换等。

字符串是最常见,也是最复杂的一种数据类型。

字符串一般不需要用引号包裹,但是如果字符串中使用了反斜杠“\”开头的转义字符就必须使用引号包裹。

# YAML
strings:
  - Hello without quote # 不用引号包裹
  - Hello
   world # 拆成多行后会自动在中间添加空格
  - 'Hello with single quotes' # 单引号包裹
  - "Hello with double quotes" # 双引号包裹
  - "I am fine. \u263A" # 使用双引号包裹时支持 Unicode 编码
  - "\x0d\x0a is \r\n" # 使用双引号包裹时还支持 Hex 编码
  - 'He said: "Hello!"' # 单双引号支持嵌套"

# YAML
nulls:
  - null
  - Null
  - ~
  -  # 未指定值

没有 +8 小时的标记时,默认就是协调世界时(UTC),也就是标准时间,转换成 JSON 都是按照协调世界时的格式,如下代码:

# YAML
dates:
  - 2024-03-05 # 协调世界时(UTC)
  - 2024-03-05T20:00:00 # 协调世界时(UTC)
  - 2024-03-05T20:00:00+08:00 # +8 小时就是北京时间
  - 2024-03-05T20:00:00.10+08:00
  - 2024-03-05 20:00:00.10 +8