2015-10-20 83 views
0

我是新來的Ruby和我試圖從以下哈希打印名稱的輸出:無法打印散列鍵值

{"id"=>"00fac6ef-ac11-4872-8d9e-3ecf32ae9689", "name"=>"nginx-srv1", "displayname"=>"nginx-srv1", "account"=>"admin", "domainid"=>"f5fed0b0-b8a9-11e4-91c4-464e571bcea9", "domain"=>"ROOT", "created"=>"2015-09-04T12:00:36-0400", "state"=>"Running", "haenable"=>false, "zoneid"=>"60763583-8ab3-436e-8acd-87c783729cdc", "zonename"=>"Toronto", "hostid"=>"d1afc732-ebd6-4e0d-8f81-3e6a0d1f559d", "hostname"=>"TOR-SRV65", "templateid"=>"cbd3ceb0-b615-440e-a0fa-dbcaa234cb8f", "templatename"=>"ubuntu-12.04.4-server-amd64", "templatedisplaytext"=>"ubuntu-12.04.4-server-amd64", "passwordenabled"=>false, "isoid"=>"4c64269d-9a79-4899-9deb-fd39e25dcdd5", "isoname"=>"xs-tools.iso", "isodisplaytext"=>"xen-pv-drv-iso", "serviceofferingid"=>"76d3bacc-eba4-4080-ba72-7c0b524f8027", "serviceofferingname"=>"Large Instance", "diskofferingid"=>"6fec5275-9ec3-4033-8052-b743b3f89303", "diskofferingname"=>"Medium", "cpunumber"=>2, "cpuspeed"=>1000, "memory"=>4096, "cpuused"=>"0.3%", "networkkbsread"=>63023, "networkkbswrite"=>8228, "diskkbsread"=>0, "diskkbswrite"=>0, "diskioread"=>0, "diskiowrite"=>0, "guestosid"=>"f68c9ab2-b8a9-11e4-91c4-464e571bcea9", "rootdeviceid"=>0, "rootdevicetype"=>"ROOT", "securitygroup"=>[], "nic"=>[{"id"=>"c664c0c2-edcf-478e-b1ab-c2b3959f93b6", "networkid"=>"31338f33-5a4c-4d22-b412-f679f9eb7a54", "networkname"=>"VM Network", "netmask"=>"255.255.255.0", "gateway"=>"192.168.10.1", "ipaddress"=>"192.168.10.118", "isolationuri"=>"vlan://3390", "broadcasturi"=>"vlan://3390", "traffictype"=>"Guest", "type"=>"Isolated", "isdefault"=>true, "macaddress"=>"02:00:77:59:00:09"}], "hypervisor"=>"XenServer", "instancename"=>"i-2-32-VM", "tags"=>[], "details"=>{"hypervisortoolsversion"=>"xenserver56"}, "affinitygroup"=>[], "displayvm"=>true, "isdynamicallyscalable"=>false, "ostypeid"=>164} 

這是我曾嘗試

vm.each do |key, value| 
     value["name"] 
end 

我得到

script.rb:12:in `[]': no implicit conversion of String into Integer (TypeError) 
     from script.rb:12:in `block in <main>' 
     from script.rb:11:in `each' 
     from script.rb:11:in `<main>' 

我不知道我做錯了,我想提取的鍵「name」的值

謝謝

回答

2

的語法獲取與鍵關聯的值是:

vm["name"] 

或者在你的each環,你已經擁有的價值。爲了說明差別(注意,這是可憐的代碼):

vm.each do |key, value| 
    if key == "name" 
     puts value 
    end 
end 
0

你可以嘗試使用選擇tranverse哈希

vm.select{|k,v| v if k=="name"} 

但這回

{"name"=>"nginx-srv1"} 

要獲得僅價值

h=vm.select{|k,v| v if k=="name"} 
puts h.values 

獲取值的最佳方法是使用

vm["name"]