22

我有这样一个 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"}

如何删除 {} 和 "" ?

4

2 回答 2

40

好的,这是你的 YAML 文件,对吧?

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932

好的,现在这个 YAML 文件实际上代表了一个 Hash。has 有两个键,即 Company1、Company2(因为它们是前导条目,而子条目(名称和已建立)在它们下面缩进)。这两个键的值又是一个哈希。这个哈希也有两个键,即名称和建立。它们分别具有Something1和2000等值。

所以当你这样做时,

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

并使用打印配置(这是一个表示 YAML 文件内容的哈希),

puts config

你得到以下输出:

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

所以我们有一个 YAML 文件描述的 Hash 对象。

使用这个 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

所以在每次迭代中,我们都可以访问哈希的每个(键,值)。在第一次迭代中,我们将company(key) asCompany1details(value) as{"name"=>"Something1", "established"=>2000}

希望这有帮助。

于 2012-11-09T18:31:58.577 回答
4

YAML 使用缩进来确定作用域,所以试试,例如:

Company1:
  name: Something1
  established: 2000

Company2:
  name: Something2
  established: 1932
于 2012-11-09T15:09:45.943 回答