我有一个带哈希的数组:
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\"}}"}}]
“users”键的值是一个字符串,必须经过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 :(得分: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]
可让您使用键值对映射新的哈希值。
额外的gsub
是因为在你想要的结果中你省略了这个斜杠而它不是JSON编码的一部分所以它不会被JSON.parse
删除。