Convertir Ruby Hash en YAML
J'ai besoin de convertir un hachage comme celui fourni ci-dessous en YAML lisible. Il semble que je puisse nourrir YAML::load
une chaîne, mais je pense que je dois d'abord la convertir en quelque chose comme ceci:
hostname1.test.com:
public: 51
private: 10
{"hostname1.test.com"=>
{"public"=>"51", "private"=>"10"},
"hostname2.test.com"=>
{"public"=>"192", "private"=>"12"}
}
Je ne suis pas sûr exactement comment faire cette conversion dans cette chaîne efficacement cependant.
J'ai regardé à travers la documentation de hachage et je n'ai rien trouvé pour to_yaml
. Je l'ai trouvé en cherchant {[2] } qui devient disponible lorsque vous require yaml
. J'ai aussi essayé d'utiliser la méthode Énumérable collect
mais je suis devenu confus quand j'ai eu besoin d'itérer à travers la valeur (un autre hachage).
J'essaie d'utiliser " conversion de hachage en chaîne dans Ruby" comme référence. Ma pensée était alors de nourrir cela dans YAML::load
et cela générerait le YAML que je voulais.
2 réponses
Voici comment je le ferais:
require 'yaml'
HASH_OF_HASHES = {
"hostname1.test.com"=> {"public"=>"51", "private"=>"10"},
"hostname2.test.com"=> {"public"=>"192", "private"=>"12"}
}
ARRAY_OF_HASHES = [
{"hostname1.test.com"=> {"public"=>"51", "private"=>"10"}},
{"hostname2.test.com"=> {"public"=>"192", "private"=>"12"}}
]
puts HASH_OF_HASHES.to_yaml
puts
puts ARRAY_OF_HASHES.to_yaml
Quelles sorties:
---
hostname1.test.com:
public: '51'
private: '10'
hostname2.test.com:
public: '192'
private: '12'
---
- hostname1.test.com:
public: '51'
private: '10'
- hostname2.test.com:
public: '192'
private: '12'
La classe D'objet a une méthode to_yaml. Je l'ai utilisé et il a généré le fichier YAML correctement.
Non, ce n'est pas le cas.
Ceci provient d'une session IRB fraîchement ouverte:
Object.instance_methods.grep(/to_yaml/)
=> []
require 'yaml'
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
Vous pouvez utiliser la méthode to_yaml
sur un hachage pour cela je crois après vous require yaml