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 Company1
和details
(value)as{"name"=>"Something1", "established"=>2000}
希望这有帮助.
YAML 使用缩进来确定范围,因此请尝试,例如:
Company1:
name: Something1
established: 2000
Company2:
name: Something2
established: 1932
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
27196 次 |
最近记录: |