Skip to content
内容导航

数据类型

Yaml 支持以下几种数据类型:

  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
  • 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
  • 纯量:单个的、不可再分的值,比如整数、浮点数、布尔值、字符串等基本数据类型

对象

对象也是一个键值对,只不过其值并非是纯量,而是一组键值对。

yaml
root-key:
  child-key1: value1
  child-key2: value2
json
{
    "root-key": {
        "child-key1": "value1",
        "child-key2": "value2"
    }
}

Yaml 也允许另一种写法,将所有键值对写成一个行内对象。

yaml
root-key: { child-key1: value1, child-key2: value2 }
json
{
    "root-key": {
        "child-key1": "value1",
        "child-key2": "value2"
    }
}

数组

- 开头的行表示构成一个数组:

yaml
fruits:
  - apple
  - orange
  - pear
json
{
    "fruits": [
        "apple",
        "orange",
        "pear"
    ]
}

Yaml 数组可以使用行内表示:

yaml
fruits: [ apple, orange, pear ]
json
{
    "fruits": [
        "apple",
        "orange",
        "pear"
    ]
}

数据结构的子成员是一个数组,则可以在该项下面缩进一个空格:

yaml
-
  - apple
  - orange
  - pear 
json
[
    [
        "apple",
        "orange",
        "pear"
    ]
]

纯量

纯量是最基本的、不可再分的值。分别包括:

字符串

yaml
string:
- Hello # 字符串默认不使用引号表示
# 使用双引号或者单引号包裹特殊字符
- ' world'
# 单引号和双引号都可以使用,双引号不会对特殊字符转义
- "Hello\nworld"
- 'Hello\nworld'
# 单引号之中如果还有单引号,必须连续使用两个单引号转义
- 'Curder''s iPhone'
# 字符串可以写成多行,从第二行开始,必须有一个单空格缩进,换行符会被转为空格
- Hello
  world
# 多行字符串可以使用 | 保留换行符,也可以使用 > 折叠换行
- |  # 多行字符串可以使用 | 保留换行符
  Hello
  world
- >  # 使用 > 折叠换行
  Hello
  world
- |+  # + 表示保留文字块末尾的换行
  Hello
- |-  # - 表示删除字符串末尾的换行
  Hello
- |  # 字符串之中可以插入 HTML 标记
  <p style="color: red">
    段落
  </p>
json
{
    "string": [
        "Hello",
        " world",
        "Hello\nworld",
        "Hello\\nworld",
        "Curder's iPhone",
        "Hello world",
        "Hello\nworld\n",
        "Hello world\n",
        "Hello\n",
        "Hello",
        "<p style=\"color: red\">\n  段落\n</p>\n"
    ]
}

布尔值

布尔值可以使用 falsetrueFalseTrueFALSETRUE 表示。

yaml
bool:
  - false # False, FALSE 均可
  - true # True,TRUE 均可
json
{
    "bool": [
        false,
        true
    ]
}

整数

使用二进制表示整数。

yaml
integer:
  - 123
  - 0b0000_0000_0000_0111_1011 # 使用二进制表示
json
{
    "integer": [
        123,
        123
    ]
}

浮点数

可以使用科学计数法表示浮点数。

yaml
float:
  - 3.1415926
  - 0.031415926e+2
json
{
    "float": [
        3.1415926,
        3.1415926
    ]
}

Null

使用 ~ 表示 null

yaml
null:
  - null
  - ~ # 使用 ~ 表示 null

json
{
    "null": [
        null,
        null
    ]
}

时间

时间使用ISO 8601 格式,时间和日期之间使用 T 连接,最后使用 + 代表时区

yaml
datetime: 2023-01-05T17:03:12+08:00 # 时间使用ISO 8601 格式,时间和日期之间使用 T 连接,最后使用 + 代表时区
json
{
    "datetime": "2023-01-05T09:03:12.000Z"
}

日期

日期必须使用 ISO 8601 格式,即 yyyy-MM-dd

yaml
date: 2022-01-05 # 日期必须使用 ISO 8601 格式,即 yyyy-MM-dd
json
{
  "date": "2022-01-05T00:00:00.000Z"
}

强制转换类型

yaml
string:  !!str 123
bool:    !!bool 'true'
json
{
    "string": "123",
    "bool": true
}

复合结构

对象和数组可以结合使用,形成复合结构。

yaml
languages:
 - PHP
 - JavaScript
 - Python
 - Yaml
websites:
 PHP: php.net
 JavaScript: javascript.com 
 Python: python.org 
 Yaml: yaml.org 
json
{
    "languages": [
        "PHP",
        "JavaScript",
        "Python",
        "Yaml"
    ],
    "websites": {
        "PHP": "php.net",
        "JavaScript": "javascript.com",
        "Python": "python.org",
        "Yaml": "yaml.org"
    }
}