深入探索
YAML 的简要指南
在 YAML 中,数据被分成包含“序列”(sequences)数据的“文档”。每个文档以三个短划线字符 ---
开头,列表中的每个单独元素都以单个短划线字符 -
开头。因此,例如,这是一个 YAML 数据文件,包含一个文档和两个列表项:
---
- artist: The Groovesters
name: Groovy Tunes
numtracks: 12
- artist: Dolly Parton
name: Greatest Hits
numtracks: 38
在上面的示例中,你可以看到每个列表项由两部分组成 - 名称如 artist:
(在每个列表项中相同)和右侧的一段数据,例如 Dolly Parton
,可能因每个列表项而异。这些项类似于 Ruby 的 Hash 中的键值对。YAML 将键值列表称为“映射”(maps)。
下面是一个包含两个项目的列表的 YAML 文档,每个项目包含三个项目 - 换句话说,它是包含两个三项“嵌套”数组的数组的 YAML 表示形式:
---
- - The Groovesters
- Groovy Tunes
- 12
- - Dolly Parton
- Greatest Hits
- 38
现在让我们看看 YAML 如何处理嵌套的哈希(Hashes)。
思考这个 Hash:
hash_to_yaml.rb
hsh = { :friend1 => 'mary',
:friend2 => 'sally',
:friend3 => 'gary',
:morefriends => { :chap_i_met_in_a_bar => 'simon',
:girl_next_door => 'wanda'
}
}
正如我们已经看到的,Hash 在 YAML 中很自然地表示为键值对列表。但是,在上面显示的示例中,关键字 :morefriends
与嵌套哈希值相关联。YAML 如何表示?事实证明,与数组一样(参见本章前面的“嵌套序列”),它只是缩进嵌套的哈希:
:friend1: mary
:friend2: sally
:friend3: gary
:morefriends:
:chap_i_met_in_a_bar: simon
:girl_next_door: wanda
有关 YAML 的详细信息,请访问 http://yaml.org
随 Ruby 提供的 YAML 库非常庞大且复杂,并且有许多方法可供你使用,而不仅是本章所述的。但是,你现在应该对 YAML 有了足够的了解,以便在你自己的程序中使用它。你可以在闲暇时慢慢地探索 YAML 库。
但事实证明,YAML 并不是在 Ruby 中序列化数据的唯一方法。我们将在下一章中讨论另一种方式。