YAML文件中的哈希表?

28
我想在一个YAML文件中包含哈希和列表,我正在使用以下命令进行解析:
APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")

我的YAML文件看起来像这样:

feeds: [{:url => 'http://www.google.com', :label => 'default'}]

但是这似乎行不通。我该如何实现这样的功能呢?

谢谢, Yuval


编辑:抱歉,各位。我仍然不清楚如何做到这一点,我怀疑这部分是由于我的措辞有些含糊不清。我在这里提出了一个更好的问题 (链接)。谢谢!

3个回答

32
你可以这样标记它
feeds:
 - 
  url: 'http://www.google.com'
  label: 'default'
注意这里的空格很重要。"-" 必须缩进一个空格(不是制表符),并且后面跟着一个空格。而urllabel必须缩进两个空格(也不是制表符)。
另外,这可能会有所帮助:http://www.yaml.org/YAML_for_ruby.html

16

Ceilingfish的回答可能在技术上是正确的,但他建议在行尾使用空格。这容易出错,不是一个好的做法!

以下是我会这样做:

创建一个名为settings.yaml的文件,内容如下:

---
feeds:
  :url: 'http://www.google.com'
  :label: 'default'

在加载 YAML 文件后,这将创建以下哈希:

irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> YAML.load_file('settings.yaml')
=> {"feeds"=>{:url=>"http://www.google.com", :label=>"default"}}
irb(main):003:0> 
在这个例子中,我也使用符号,因为这似乎是在 Ruby 中存储键的首选方式。

但这样真的会产生他所要求的结果吗?我认为他想要“feeds”成为哈希列表,而不仅仅是一个哈希。我也处于同样的境地,也不喜欢需要尾随空格的脆弱方法。有什么想法吗? - estan
没事了,我已经解决了。我会发布自己的答案来回答这个问题。 - estan

7

虽然这是一个旧问题,但由于我的情况类似......就像Jasper指出的那样,Ceilingfish的答案是正确的。但你也可以这样做:

feeds:
 - url: 'http://www.google.com'
   label: 'default'

为了避免在破折号后面依赖尾随空格,请做出改进。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接