我有这样一个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"}
如何删除{}和“”?
答案 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