Yaml

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。

基本语法

  • 使用Unicode字符,可以使用UTF-8或者UTF-16

  • 大小写敏感

  • 使用缩进表示层级关系,缩进时不允许使用Tab键,只允许使用空格

  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

  • 在单一文件中,可用连续三个连字号---区分多个文件,有选择性的连续三个点号( ... )用来表示文件结尾

纯量(scalars)数据

字符串

  • 单行字符串

    # 普通形式
    string1: hello world!
    
    # 单引号,不会解析任何转义字符,所有内容都会原样输出
    string2: 'hello\nworld!'
    # 如果要表示单引号,需要使用 ''
    string3: 'hello ''world!'''
    
    # 双引号,会解析转义字符,如果要表示\,需要使用\\
    string4: "hello\nworld!"
    {
      "string1": "hello world!",
      "string2": "hello\\nworld!",
      "string3": "hello 'world!'",
      "string4": "hello\nworld!"
    }
  • 多行字符串,每行的换行以及空格会被转换为单个空格字符

    # 普通样式,不支持转义字符,每行行尾空格不保留
    lstr1: a
      bb\n
      ccc   #这里有空格
    # 单引号样式,不支持转义字符,'的输入需要使用''替代转义
    lstr2: 'a\n
    ''bb''
    ccc   '
    # 双引号样式,支持转义字符,\与"要进行转义处理,\放置在行尾可以删除空格
    lstr3: "a\n
    bb\"\
    ccc   "
    {
      "lstr1": "a bb\\n ccc",
      "lstr2": "a\\n 'bb' ccc   ",
      "lstr3": "a\n bb\"ccc   "
    }
  • 多行字符串,使用 >折叠换行符,将多行折叠为一行

    • 注意每行文字之前要有相同的缩进

    • 会在末尾添加换行符

    • 不会解析转义字符 \'", 他们都会被原样输出

    • 行与行之间会有空格

    bstr1: >
      'a'
      "bb"
      \ccc\
      dddd
    {
      "bstr1": "'a' \"bb\" \\ccc\\ dddd\n"
    }
  • 多行字符串,使用 |保留换行符

    • 注意每行文字之前要有相同的缩进

    • 会在末尾添加换行符

    • 不会解析转义字符 \'", 他们都会被原样输出

    • 行与行之间保留换行符,而不是空格

    bstr2: |
      'a'
      "bb"
      \ccc\
      dddd
    {
      "bstr2": "'a'\n\"bb\"\n\\ccc\\\ndddd\n"
    }
  • 多行字符串,使用 +-> 以及 | 进行样式裁剪

    • >| :“剪辑”:保持尾行换行符,删除尾随空白行。

    • >-|- :“strip”:删除尾行换行符,删除尾随空白行。

    • >+|+ :“keep”:保持尾行换行符,保持尾随空行。

    cstring1: |
      a
      bb
      
    cstring2: |-
      a
      bb
    
    cstring3: |+
      a
      bb
      
    {
      "cstring1": "a\nbb\n",
      "cstring2": "a\nbb",
      "cstring3": "a\nbb\n\n"
    }

数字

空值

布尔

时间和日期

使用 iso-8601 标准表示日期与时间

类型转换

Yaml 内置的类型列表:

类型
描述

int

整数

float

浮点数

bool

布尔

str

字符串

binary

字符串

timestamp

日期时间

null

set

集合

omp, pairs

键值列表或对象列表

seq

序列,也是列表

map

键值表

使用!进行类型转换,如果是单个!,代表转换类型为自定义类型,如果是!!则是内置类型:

对象数据

  • 一个yaml文档就是一个对象:

  • 行内对象

数组数据

  • 一组连词线开头的行,构成一个数组:

  • 行内数组

引用

引用对象

等同于

引用单个值

等同于

参考

最后更新于

这有帮助吗?