我怎么能读YAML文件?

new*_*wbi 19 ruby ruby-on-rails

我有这样一个YAML文件:

Company1:
  name: Something1
  established: 2000
#
Company2:
  name: Something2
  established: 1932
Run Code Online (Sandbox Code Playgroud)

阅读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
Run Code Online (Sandbox Code Playgroud)

**更新**现在上面的代码正常工作,但它显示的结果如下:

 company1 =>  {"name" => "something1"} => {"established year" => 2000"}
Run Code Online (Sandbox Code Playgroud)

如何删除{}和""?

Ste*_*son 35

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

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932
Run Code Online (Sandbox Code Playgroud)

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

所以当你这样做的时候

config=YAML.load_file('file.yml')
Run Code Online (Sandbox Code Playgroud)

并使用打印配置(表示YAML文件内容的Hash),

puts config
Run Code Online (Sandbox Code Playgroud)

你得到以下输出:

{"Company1"=>{"name"=>"Something1", "established"=>2000}, "Company2"=>{"name"=>"Something2", "established"=>1932}}
Run Code Online (Sandbox Code Playgroud)

所以我们有一个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
Run Code Online (Sandbox Code Playgroud)

因此,在每次迭代中,我们都可以访问哈希的每个(键,值).这在第一次迭代中我们有company(键)as Company1details(value)as{"name"=>"Something1", "established"=>2000}

希望这有帮助.


Mor*_*ori 4

YAML 使用缩进来确定范围,因此请尝试,例如:

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932
Run Code Online (Sandbox Code Playgroud)