在Ruby中解析YAML:如何只获取某种类型的元素?

时间:2011-07-05 05:46:08

标签: ruby yaml

我有以下YAML:

- name: List of monkeys
- author: Nicolas Raoul
- version: 2
- monkey: 
   - name: Chee-Chee
   - age: 2
- monkey:
   - name: Curious George
   - age: 6
   - food: bananas
- monkey:
   - name: Mojo
   - food: peanuts

在Ruby中,如何获取猴子? 前导码(名称,作者,...)中元数据参数的数量是可变的。

会返回类似的内容:

[{"monkey"=>[{"name"=>"Chee-Chee"}, {"age"=>2}]}, {"monkey"=>[{"name"=>"Curious George"}, {"age"=>6}, {"food"=>"bananas"}]}, {"monkey"=>[{"name"=>"Mojo"}, {"food"=>"peanuts"}]}]

在XML / XPath中我只想编写/monkey,但是YAML / Ruby的语法是什么?

注意:我不想创建一个包含所有猴子的monkeys节点作为子项,因为有很多猴子,客户端会编辑文件以添加更多,所以我想要保持文件非常简单。我是YAML的新手,所以可能需要一个更好的组织,但简洁是至关重要的,特别是我不想增加子级别的数量。

1 个答案:

答案 0 :(得分:3)

您可以使用Enumerator的#select方法仅返回集合中的猴子。如果您在名为your_yaml的变量中包含已解析的YAML对象,则此代码将返回您要求的内容:

your_yaml.select { |item| item['monkey'] }

您可能不需要第二级连字符。如果你改变了......

- monkey: 
   - name: Chee-Chee
   - age: 2

进入这个:

- monkey: 
    name: Chee-Chee
    age: 2

猴子的属性将是哈希,而不是哈希数组。我想这对你更有用。