• YAML 语法


    官网
    官方文档
    在线工具
    参考资料

    1. YAML 是啥

    YAML 官方解释:YAML Ain’t Markup Language,即 YAML 不是标记语言。

    YAML 是一个可以用于所有编程语言的可读性非常好的序列化标准。YAML 广泛用于配置文件。

    已经实现 YAML 的语言有:Ruby,Java,Perl,Python,PHP,JavaScript。

    2. YAML、XML 及 JSON

    YAML 有以下优点:

    • 可读性好
    • 易于手工维护
    • 和脚本语言的交互性好
    • 使用实现语言的数据类型(确定是难以跨语言交互数据)
    • 可以基于流来处理
    • 解析效率高

    2.1 XML 和 YAML

    XML 解析效率比 YAML 低,但是 XML 支持自定义的数据类型,有大量额外的工具来验证它的格式。

    XML 和 YAML 之间没有直接的关联。

    YAML 主要是一种数据序列化语言。XML 旨在向后兼容支持结构化文档的标准通用标记语言(Standard Generalized Markup Language,SGML)。 因此,XML 有许多设计限制。XML 是许多领域的先驱,YAML 从 XML 和其他技术中汲取经验教训。

    2.2 JSON 和 YAML

    JSON 中使用了 {}[],难以手工维护 JSON 文件,而 YAML 使用空格缩进,既易读又易维护。

    JSON 和 YAML 都旨在成为人类可读的数据交换格式。但是,JSON 最重要的设计目标是简单和通用性,并以减少可读性为代价实现这个目的。

    YAML 最重要的设计目标是可读性和对序列化任意本地数据结构的支持。因此,YAML 文件非常易读,但是生成和解析过程变得更复杂。另外,在不同编程环境之间交叉使用 YAML 需要更复杂的处理,所以如果跨语言交互数据,请使用 JSON

    YAML 可以被视为 JSON 的超集,提供更优的可读性和更完整的信息模型。实际情况也是如此,每个 JSON 文件也是一个有效的 YAML 文件。如果有需要,可以轻松地从 JSON 迁移到 YAML。

    3. 语法

    3.1 字符编码及文档分隔

    YAML 使用可打印的 Unicode 字符(即非控制字符),支持 UTF-8 和 UTF-16 两种编码。

    YAML 使用三个破折号(“—”)将分隔文档中的指令。如果没有指令存在,这也用于指示文档的开始。三个点(“…”)表示文档的结束,表示通信通道中不会再有新文档了。

    例如,一个文件中的两个文档:

    # Ranking of 1998 home runs
    ---
    - Mark McGwire
    - Sammy Sosa
    - Ken Griffey
    
    # Team ranking
    ---
    - Chicago Cubs
    - St Louis Cardinals

    3.2 基本语法规则

    • 大小写敏感。
    • 使用空格缩进表示层级关系,相同层级的元素左侧有相同个空格。缩进时不允许使用 Tab,只允许使用空格。
    • # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
    • 对象的键值对用冒号加空格表示 key: value
    • 数组列表用破折号加空格(a dash and space)表示:- break: lunch

    3.3 数据结构

    YAML 支持的数据结构有三种。

    • 对象:键值对集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)。
    • 数组:一组按序排列的值,又称为序列(sequence) / 列表(list)。
    • 标量:scalars,单个的、不可再分的值,即使是字符串也可以不用引号。用单引号或者双引号括起来的被当作字符串数据,在单引号或双引号中使用 C 风格的转义字符。

    3.3.1 对象

    对象由键值对组成,使用冒号分隔。

    标量组成的对象:

    hr:  65    # 相当于 JSON 的 {"hr":65}

    YAML 也允许将所有键值对写成一个行内对象:

    people: { name: Steve, age: 30 } # 相当于 JSON 的 {"people":{"name":"Steve", "age":30}}

    3.3.2 数组

    一组相同缩进的破折号开头的行,构成一个数组。例如,标量组成的数组:

    - Mark McGwire
    - Sammy Sosa
    - Ken Griffey

    数组可以嵌套:

    -
     - Mark McGwire
     - Sammy Sosa
     - Ken Griffey

    第一个例子相当于 JSON 中的 [“Mark McGwire”, “Sammy Sosa”, “Ken Griffey”],第二个相当于 [[“Mark McGwire”, “Sammy Sosa”, “Ken Griffey”]]。

    跟对象类似,也可以将数组的所有元素写在一行:

    people: [Mark, Ken]

    3.3.3 标量 Scalars

    YAML 中支持的 scaler 类型

    • 字符串:在 YAML 中不需要引号,例如:name: jack。例外:
      • 如果字符串之中包含空格或特殊字符,需要使用单引号或双引号,例如:name: jack li
      • 如果字符串中使用转义字符,则必须使用双引号,例如:name: "jack line"
      • 使用了单引号的字符串中再次出现单引号时,需要用两个单引号转义,例如:name: 'jack''s name'
    • 布尔值:true 或 false,例如:isAdult: true
    • 数值
      • 整数:例如:age: 33
      • 浮点数
    • Null:在 YAML 中用 ~ 表示,例如:name: ~
    • 时间:时间采用 ISO8601 格式。iso8601: 2001-12-14t21:59:43.10-05:00
    • 日期:日期采用复合 ISO8601 格式的年、月、日表示。date: 1976-07-31

    强制类型转换

    YAML 使用两个感叹号强制转换数据类型:

    name: !!str true # 相当于 JSON 的 {"name":"true"}

    3.4 引用

    & 用来建立锚点(defaults),需要同时指定锚点的名字。<< 表示合并到当前数据,* 用来通过名字引用锚点。示例:

    # 相当于 JSON 的 [ { x: 1, y: 2 }, { x: 1, y: 2, r: 10, label: 'center' } ]
     - &CENTER { x: 1, y: 2 }
     - # Merge one map
        << : *CENTER
        r: 10
        label: center
  • 相关阅读:
    样式的使用
    样式的使用
    jqurey基础一
    jQuery三天复习.md
    webstorm快捷键大全
    计算机的进制与编码
    2016-4-29HTML标记的使用
    HTML的基本概况
    Apache Maven 入门篇 ( 上 )
    ehcache.xml 分布试缓存
  • 原文地址:https://www.cnblogs.com/kika/p/10851673.html
Copyright © 2020-2023  润新知