跳至主要內容

如何编写 YAML

大约 5 分钟约 1401 字

YAML 是专门用来写配置文件的语言,非常简洁和强大。

yaml 介绍

YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类读写。

它的基本语法规则如下。

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用 Tab 键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

yaml 中的值

在编写小程序页面时,用到的值类型一共有五种:

  • string(字符串)
  • number(数字)
  • boolean(布尔值)
  • array(数组)
  • object(对象)

number

number,译为数字,代表可直接参与运算的数值。在 YAML 中,整数和小数均直接表示。

:

  • 5201314
  • -1
  • 3.141592654

总结

遇到 number 类型的数据时,直接填入数字即可。

boolean

boolean,译为布尔值,表示真假。只有两个可选值: truefalse

总结

遇到 boolean 类型的数据时,直接填入 truefalse 即可。

string

string,译为字符串,用于表达文本。在 YAML 中,不与其他规则相冲突的字符串可直接表示。

:

  • in东师,最全新生攻略

规则

由于字符串的内容是多样化的,如果字符串出现了 YAML 约定的格式或特殊字符,则需要使用引号引起。引起时两侧保持一致,单引号、双引号均可。

  • 特殊字符可使用转义符号表示,如回车可表示为 \n,制表符 (Tab) 可表示为 \t

    特别地,对于 \ 自己,需要表示为 \\

    :

    春眠不觉晓,
    处处闻啼鸟。
    

    可表示为

    "春眠不觉晓,\n处处闻啼鸟。"
    
  • 如果字符串含有特殊格式 (如对象键值对格式": "、首位有空格、首尾有引号) 或命中了关键字如 true,需要放在双引号之中。

    特别地,如果字符串两端或引起的内容内含有双引号,需要改用单引号,或在使用双引号的情况下将内部的双引号使用 \ 转义为 \"

    :

    • 关键字:

    3 字符串需表达为 "3"true 字符串需表达为 "true"

    •  前面有空格
      

      需表示为

      " 前面有空格"
      
    • 注: 这很简单 因命中对象键值对表示方法,需用表示为

      "注: 这很简单"
      
    • A saying goes: "Great hopes make great man." 因末尾出现双引号可使用单引号引起

      'A saying goes: "Great hopes make great man."'
      
  • 如果字符串有多行,可以以 |- 开头,并另起一行开始正常换行书写,无需再包含双引号。

    |-
    这是一段文字。
    这是新一段文字。
     1. 序号1,标号前有空格
     2. 序号2,标号前有空格
    

常见混淆点

  • 1 是可以参加运算的数字;"1" 是表示内容的字符串;同理,"true" 表达 true 文本,而 true 是表示“真”的布尔值。

  • 如果想要在字符串中表示回车,请输入 \n 并使用引号引起字符串,或使用 |- 开头多行表示。

array

Array 译为数组,它是一个内容的集合,每个数组的每一项叫一个元素(element)。每个元素(element)可以是其他的任何值类型。

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

:

  • - Cat
    - Dog
    - Goldfish
    
  • - -5
    - abc
    - true
    

    在此数组中第一项是数字 -5,第二项是字符串 "abc",第三项是布尔值 true

    数组的元素也可以是接下来的 object,会在“嵌套”一节中演示。

总结

array 是一个包含若干 元素 的集合,其中元素可以是其他数据类型。

object

object 译为对象(不是您想的那个对象),它是一组“键-值”对集合。每个键(key)对应着一个值(value),用冒号对应:

键1: 值1
键2: 值2

其中,键需要为有效的字符串,值可以是任何内容。

:

  • a: 1
    b: "2"
    c: true
    d: "false"
    

    该对象有四项,分别是:

    • 值为数字 1a
    • 值为字符串 2b
    • 值为布尔值 真(true)的 c
    • 值为字符串 falsed
  • tag: text
    heading: 校园卡说明
    text: 校园卡是东师的金融消费卡
    

总结

object是一个拥有若干键值对的集合,其中值可以是其他数据类型。

关于值的嵌套

由于 array 的元素和 object 的键值对中的值可以是五种值的任一个,故可以发生嵌套。

前文提到“YAML 使用缩进表示层级关系”。如果您想进行嵌套,为了表示从属关系,作为数组元素或对象键值的其他对象或数组,应进行缩进。

注意

需要特别注意,对象的每个键值对、数组的每个元素必须有相同的缩进,通常为两个空格。

:

animal:
  - dog
  - cat
  - fish

personal-info:
  name: Mr.Hope
  gender: male
  address:
    - province: Liao Ning
      city: AnShan
    - province: Ji Lin
      city: Changchun

就是一个对象,它有两个键 animalpersonal-infoanimal 键对应的值是一个数组,包含三个字符串 dogcatfish,而 personal-info 的值又是对象。该对象的 address 的值还是一个数组,数组的每个元素又是对象。

注释

除了配置文件外,可以通过添加注释的方式添加说明文字。

YAML 中用# 表示注释,从这个字符一直到行尾,都会被解析器忽略。

如:

# 这一行会被忽略
这一行会被当成一个字符串