我有一个YAML文件,其中包含一些如下所示的条目:
001:
:title: Some title
:description: Some body text maybe
002:
:title: Some title
:description: Some body text maybe
Run Code Online (Sandbox Code Playgroud)
我正在使用以下Ruby方法将YAML文件解析为一组可以迭代的对象:
def parse_yaml(file)
YAML::load(File.open(File.join(settings.yaml_folder, file)))
end
def use_yaml
@items = parse_yaml('items.yml')
@items.each do |item|
x = item[1][:title]
etc...
end
end
Run Code Online (Sandbox Code Playgroud)
现在,该方法可行,但我发现我需要使用它item[1][:title]来访问我正在迭代的对象的属性.如何构建我的YAML文件或我的解析代码以允许我使用更标准的item[:title]?
这是一个哈希.该parse_yaml输出是:
{ 1=>
{ :title=>"Some title",
:description=>"Some body text maybe"},
2=> { :title=>"Some title",
:description=>"Some body text maybe" }
}
Run Code Online (Sandbox Code Playgroud)
你可以使用这样的each_value方法:
#...
@items = parse_yaml('items.yml')
@items.each_value do |item|
x = item[:title]
# ... etc
end
Run Code Online (Sandbox Code Playgroud)
Recomend:YAML for Ruby
潜在的问题是您的 YAML 文件将您的数据存储为散列,并尝试像数组一样访问它。
要将数据转换为数组格式:
---
- :title: Some title
:description: Some body text maybe
- :title: Some title
:description: Some body text maybe
Run Code Online (Sandbox Code Playgroud)
同样有趣的是,您必须使用item[1][:title]来引用您的项目的原因是键001和002被 YAML.load 转换为整数。
您可以在 irb 中确认这一点:
irb(main):015:0> YAML.load(File.open("./test.yml"))
=> {1=>{:title=>"Some title", :description=>"Some body text maybe"}, 2=>{:title=>"Some title", :description=>"Some body text maybe"}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25313 次 |
| 最近记录: |