Der eingebaute in from_xml
Schienen Hash
Methode wird genau das tun, was Sie wollen. Um Ihre response.parsed_response
korrekt auf einen Hash zugeordnet zu bekommen, die Sie gsub()
aus den Zeilenumbrüche brauchen werden:
hash = Hash.from_xml(response.parsed_response.gsub("\n", ""))
hash #=> {"Result"=>{"success"=>"true"}}
Im Rahmen eines Hash in Rails zu parsen, Objekte von String
Typ sind not substantively different als die von Symbol
aus eine allgemeine Programmierperspektive. Sie können jedoch die Schienen symbolize_keys
Methode mit dem Ausgang gilt:
symbolized_hash = hash.symbolize_keys
#=> {:Result=>{"success"=>"true"}}
Wie Sie sehen können, symbolize_keys
nicht auf irgendwelchen verschachtelten Hashes funktioniert, aber man könnte möglicherweise durch innere Hashes iterieren und symbolize_keys
gelten.
Das letzte Teil des Puzzles ist die Zeichenfolge "true"
in den booleschen true
zu konvertieren. AFAIK, gibt es keine Möglichkeit, dies an Ort und Stelle auf dem Hash zu tun, aber wenn Sie Iterieren/Betrieb auf sie, man könnte möglicherweise eine Lösung wie die suggested in this post implementieren:
def to_boolean(str)
return true if str == "true"
return false if str == "false"
return nil
end
Grundsätzlich, wenn Sie die innere erreichen Schlüssel-Wert-Paar, wenden Sie to_boolean()
auf den Wert, der derzeit auf "true"
festgelegt ist. In Ihrem Beispiel ist der Rückgabewert der boolesche Wert true
.
http://www.railstips.org/blog/archives/2008/08/11/parsing-xml-with-ruby/ –