我怎么能读YAML文件?

时间:2012-11-09 15:03:48

标签: ruby-on-rails ruby

我有这样一个YAML文件:

Company1:
  name: Something1
  established: 2000
#
Company2:
  name: Something2
  established: 1932

阅读YAML文件:(**更新**)

    config = YAML.load_file('file.yaml')
    config.each do |key, value|
     if(key == 'name')
      company_name = value
      #year = config['Company1']['established']
      year = config.fetch(key)['established']
     end
   end

**更新** 现在上面的代码正在运行,但它将结果显示为:

 company1 =>  {"name" => "something1"} => {"established year" => 2000"}

如何删除{}和“”?

2 个答案:

答案 0 :(得分:34)

好的,这是你的YAML文件吗?

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932

好的,现在这个YAML文件实际上代表了一个哈希。有两个键,即Company1,Company2(因为它们是主要条目,子条目(名称和已建立)在它们下面缩进)。这两个键的值再次是哈希。这个Hash也有2个键,即name和established。它们的值分别为Something1和2000等。

所以当你这样做时,

config=YAML.load_file('file.yml')

使用

打印config(表示YAML文件内容的Hash)
puts config

你得到以下输出:

{"Company1"=>{"name"=>"Something1", "established"=>2000}, "Company2"=>{"name"=>"Something2", "established"=>1932}}

因此我们有一个Hash对象,如YAML文件所述。

使用此Hash非常简单。

由于每个公司的名称和年份都是由外部哈希(company1,company2)保存的单独哈希,我们可以遍历这些公司。以下代码打印哈希。

config.each do |company,details|
  puts company
  puts "-------"
  puts "Name: " + details["name"]
  puts "Established: " + details["established"].to_s
  puts "\n\n"
end

因此,在每次迭代中,我们都可以访问Hash的每个(键,值)。在第一次迭代中,我们将company(密钥)设为Company1,将details(值)设为{"name"=>"Something1", "established"=>2000}

希望这会有所帮助。

答案 1 :(得分:4)

YAML uses indentation for scoping,请尝试,例如:

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932