2017-06-02 1 views
-1

Ich habe ein Array mit Hashes:Wie Hashes in Ruby für den Wiederaufbau

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\"}}"}}] 

Der Wert des „Benutzer“ Schlüssels ist ein String und muss JSON-analysiert werden, und nächsten Wert des Wurzelschlüssels auch.

Ich möchte so etwas bekommen:

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"}}] 

Bisher habe ich versucht:

arr.each do |item| 

    item.each do |key, val| 

    h[key] = val.values 
    end 
end 

, die einen Hash erzeugt:

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\"}}"]}} 

Wie kann ich diejenigen wieder aufbauen Hashs, um geparste Werte zu erhalten und die "Benutzer" -Schlüssel von jedem Hash zu löschen?

+0

Was haben Sie bisher versucht? – yzalavin

+0

Bisher habe ich so etwas gemacht: – mia102aim

+0

Bisher habe ich so etwas gemacht: 'arr.each do | item | item.each do | key, val | val = val.values ​​ h [key] = val Ende end' und ich bekam Hash 'h = { "name1"=> [ "{\" root \ ": {\" Name \“ : \ "root \", \ "Home \": \ "\ root \", \ "Status \": \ "Active \"}, \ "bee \": {\ "Name \": \ "bee \ ", \" Home \ ": \"/Biene \ ", \" Status \ ": \" Aktiv \ "}}"], "Name2" => ["{\" root \ ": {\" Name \ ": \" root \ ", \" Home \ ": \" \ root \ ", \" Status \ ": \" Active \ "}, \" alo \ ": {\" Name \ ": \" alo \ ", \" Home \ ": \" \ alo \ ", \" Status \ ": \" Active \ "}}"]} ' – mia102aim

Antwort

1

Normalerweise würde ich für den Code fragen Sie begann, aber ich kann sehen, warum Sie an einem Verlust sind, so dass hier eine Art und Weise Sie dies tun könnte:

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 

Oder, wenn Sie die kürzere Version bevorzugen:

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

Welche gibt:

[ 
    [{"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"}}}] 
] 

Die Hash[key, value] Sie mit ak einen neuen Hash lässt Karte ey-Wert-Paar.

Der zusätzliche gsub ist, weil Sie in Ihrem gewünschten Ergebnis diesen Schrägstrich weggelassen haben, während es nicht Teil der JSON-Codierung ist, so dass es nicht mit JSON.parse entfernt wird.

+0

Danke! Aber ich habe so etwas gemacht 'arr.jeach | item | item.each do | key, val | h [Schlüssel] = JSON.parse (val ['systemusers']) Ende Ende' Es funktioniert, aber produziert einen Hash. Was sollte ich in diesem Code ändern, um ein Array zu erhalten? – mia102aim

Verwandte Themen