我需要Ruby的帮助。我有两个放弃JSON的散列。我使用此代码来解析文件:
document = JSON.load File.new("hosts.txt")
file = JSON.load File.new("admins.txt")
结果是两个大哈希:
document={"total"=>13, "subtotal"=>13, "page"=>1, "per_page"=>20,
"search"=>nil, "sort"=>{"by"=>nil, "order"=>nil},
"results"=>[
{"ip"=>"10", "environment_id"=>7,
"medium_id"=>nil, "name"=>"one", "id"=>1},
{"ip"=>"15", "environment_id"=>7,
"medium_id"=>nil, "name"=>"two", "id"=>1},
{"ip"=>"10.5", "environment_id"=>6,
"medium_id"=>nil, "name"=>"four", "id"=>1}]}
file={"admins"=>[
{"name"=>"one", "surname"=>"Mark", "email"=>"mark@o.com"},
{"name"=>"two", "surname"=>"Adam", "email"=>"Adam@o.com"},
{"name"=>"four", "surname"=>"Ami", "email"=>"Ami@o.com"}]}
从第一个哈希开始,我只需要从结果密钥中提供信息,所以我已经完成了
data = document["results"]
我在第二个哈希上做了同样的事情:
people = file["admins"]
现在,当" name" 值与我想移动姓氏和电子邮件从"人数"数组到数据阵列并有另一个类似的哈希
new = {"all_data"=>[
{"ip"=>"10", "environment_id"=>7, "medium_id"=>nil,
"name"=>"one", "id"=>1, "surname"=>"Mark", "email"=>"mark@o.com"},
{"ip"=>"15", "environment_id"=>7, "medium_id"=>nil,
"name"=>"two", "id"=>1, "surname"=>"Adam", "email"=>"Adam@o.com"},
{"ip"=>"10.5", "environment_id"=>6, "medium_id"=>nil,
"name"=>"four", "id"=>1, "surname"=>"Ami", "email"=>"Ami@o.com"}]}
您能帮我做到这一点并解释它的工作原理吗?
personal_data = file['admins'].map(&:dup)
.group_by { |e| e.delete('name') }
不需要上述dup
/delete
技巧,因为下面的merge
在任何情况下都会正确处理,但这是出于语义清晰度的目的。
document['results'].map do |h|
h.merge(personal_data[h['name']].first) if personal_data[h['name']]
end
#⇒ [
# {"ip"=>"10", "environment_id"=>7, "medium_id"=>nil, "name"=>"one",
# "id"=>1, "surname"=>"Mark", "email"=>"mark@o.com"},
# {"ip"=>"15", "environment_id"=>7, "medium_id"=>nil, "name"=>"two",
# "id"=>1, "surname"=>"Adam", "email"=>"Adam@o.com"},
# {"ip"=>"10.5", "environment_id"=>6, "medium_id"=>nil, "name"=>"four",
# "id"=>1, "surname"=>"Ami", "email"=>"Ami@o.com"}]