2017-06-02 76 views
-1

我有一个哈希值的数组:如何重建哈希在Ruby中

arr = [{"name1"=>{"users"=>"{\"root\":{\"Name\":\"root\",\"Home\":\"/root\",\"Status\":\"Active\"},\"bee\":{\"Name\":\"bee\",\"Home\":\"/bee\",\"Status\":\"Active\"}}"}}, 
{"name2"=>{"users"=>"{\"root\":{\"Name\":\"root\",\"Home\":\"/root\",\"Status\":\"Active\"},\"alo\":{\"Name\":\"alo\",\"Home\":\"/alo\",\"Status\":\"Active\"}}"}}] 

的“用户”项的值是一个字符串,必须是JSON解析的,和根密钥也下一个值。

我想是这样的:

arr = ["name1"=>{"root"=>{"Name"=>"root", "Home"=>"root", "Status"=>"Active"}, "bee"=>{"Name"=>"bee", "Home"=>"bee", "Status"=>"Active"}}, 
    "name2"=>{"root"=>{"Name"=>"root", "Home"=>"root", "Status"=>"Active"}, "alo"=>{"Name"=>"alo", "Home"=>"alo", "Status"=>"Active"}}] 

到目前为止,我已经试过:

arr.each do |item| 

    item.each do |key, val| 

    h[key] = val.values 
    end 
end 

产生的哈希:

h = {{"name1"=>["{\"root\":{\"Name\":\"root\",\"Home\":\"/root\",\"Status\":\"Active\"},\"bee\":{\"Name\":\"bee\",\"Home\":\"/bee\",\"Status\":\"Active\"}}"], "name2"=>["{\"root\":{\"Name\":\"root\",\"Home\":\"/root\",\"Status\":\"Active\"},\"alo\":{\"Name\":\"alo\",\"Home\":\"/alo\",\"Status\":\"Active\"}}"]}} 

如何重建这些散列来获得解析值并从每个散列中删除“用户”键?

+0

你到目前为止尝试过什么? – yzalavin

+0

到目前为止,我已经做了这样的事情: – mia102aim

+0

到目前为止,我做了这样的事情: 'arr.each do | item | item.each do | key,val | VAL = val.values H [键] = VAL 端 end' 和我散列 'H = { “NAME1”=> [ “{\” 根\ “:{\” 名称\” :\ “根\”,\ “家庭\”:\ “/根\”,\ “状态\”:\ “活动\”} \ “蜂\”:{\ “名称\”:\“蜜蜂\ “,\”Home \“:\”/ bee \“,\”Status \“:\”Active \“}}”],“name2”=> [“{\”root \“:{\ “:\” 根\ “\ ”家庭\“:\ ”/根\“,\ ”状态\“:\ ”活动\“} \ ”ALO \“:{\ ”名称\“:\” ALO \“Home \”:\“/ alo \”,\“Status \”:\“Active \”}}“]}' – mia102aim

回答

1

通常我会问你开始与代码,但我可以看到你为什么都处于亏损状态,所以在这里的方式,你可以这样做:

require 'json' 

arr = [{"name1"=>{"users"=>"{\"root\":{\"Name\":\"root\",\"Home\":\"/root\",\"Status\":\"Active\"},\"bee\":{\"Name\":\"bee\",\"Home\":\"/bee\",\"Status\":\"Active\"}}"}}, 
{"name2"=>{"users"=>"{\"root\":{\"Name\":\"root\",\"Home\":\"/root\",\"Status\":\"Active\"},\"alo\":{\"Name\":\"alo\",\"Home\":\"/alo\",\"Status\":\"Active\"}}"}}] 


arr.map! do |user| 
    user.map do |key, value| 
    h = JSON.parse(value["users"].gsub('/','')) 
    Hash[key, h] 
    end 
end 

或者,如果您更喜欢较短的版本:

arr.map!{|user| user.map{|key, value| Hash[key, JSON.parse(value["users"].gsub('/',''))]}} 

其中给出:

[ 
    [{"name1"=>{"root"=>{"Name"=>"root", "Home"=>"root", "Status"=>"Active"}, "bee"=>{"Name"=>"bee", "Home"=>"bee", "Status"=>"Active"}}}], 
    [{"name2"=>{"root"=>{"Name"=>"root", "Home"=>"root", "Status"=>"Active"}, "alo"=>{"Name"=>"alo", "Home"=>"alo", "Status"=>"Active"}}}] 
] 

Hash[key, value]允许你映射AK一个新的Hash ey值对。

多余的gsub是因为在你想要的结果中,你省略了这个斜杠,而它不是JSON编码的一部分,所以它不会被JSON.parse删除。

+0

谢谢!但我做了这样的事情 'arr.each do | item | item.each do | key,val | h [key] = JSON。解析(val ['systemusers']) 结束 结束# 它的工作原理,但产生一个散列。我应该在这段代码中更改以获取数组? – mia102aim