ich eine Datei funktioniert:Wie ein „jeder“ Schleife zu beheben, die nicht
{
"total": 0,
"subtotal": 807,
"page": 1,
"per_page": 1000,
"search": "hostname",
"sort": {
"by": null,
"order": null
},
"results": {
"aaa-test01.myname.com":{
"hostname":"aaa-test01",
"networking":"{\"hostname\"=>\"aaa-test01\", \"mtu\"=>1500, \"netmask\"=>\"255.255.255.224\", \"primary\"=>\"eth0\"}"
},
"osilek":{
"networking":"{\"hostname\"=>\"osilek.myname.com\", \"mtu\"=>1500, \"netmask\"=>\"255.255.255.128\", \"netmask6\"=>\"ffff:ffff:ffff:ffff::\",\"primary\"=>\"eth1\"}"
}
}
}
Ich möchte eine Hash wie folgt aus:
g = {"aaa_test01.myname.com"=> "aaa-test01", "osilek.myname.com" => "osilek"}
Die Schlüssel in diesem Hash muss sind die gleichen wie die Schlüssel in Ergebnissen, Werte müssen mit den Werten von Hostname aus den Ergebnissen übereinstimmen.
Ich habe diesen Code:
#!/usr/bin/ruby
require 'rubygems'
require 'json'
data = JSON.load File.new("any.txt")
results = data["results"]
results.each do |key, hash|
hash.select! {|k,v| k == "networking"}
end
results.each do |key, h|
h.each do |key, hash|
#puts hash.select! {|k,v| k == "hostname"}
hash = JSON.parse hash.gsub('=>', ':')
hash.select! {|k,v| k == "hostname"}
new_h = h.inject({}) {|new_h, (k,v)| new_h.merge(key => hash.values)}
puts g = results.inject({}) {|g, (key, new_h)| g.merge(key => new_h.values)}
end
end
In
new_h = h.inject({}) {|new_h, (k,v)| new_h.merge(key => hash.values)}
sieht alles ok, und ich bekomme
new_h = {{"networking"=>["aaa-test01"]}, {"networking"=>["osilek"]}}
Aber im nächsten Schritt an Stelle des g
Hash ich die results
Hash vor dem Eintritt in die Schleife. Die Schleife funktioniert nicht gut und ich weiß nicht warum.
Ihre 'new_h = = h.inject ({}) ...' ist nicht verwendete Variable. – Aleksey
Ok, so wie es zu beheben? – mila002
Ich arbeite gerade daran. Bist du sicher, dass es "osilek.myname.com" => "osilek" "nicht" "osilek" => "osilek.myname.com" '? Wegen '' aaa_test01.myname.com "=>" aaa-test01 "' – Aleksey