J'ai besoin de convertir un hachage comme celui fourni ci-dessous en YAML lisible. On dirait que je peux 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 sais pas exactement comment faire cette conversion dans cette chaîne efficacement.
J'ai parcouru la documentation HASH et je n'ai rien trouvé pour to_yaml
. Je l'ai trouvé en recherchant to_yaml
qui devient disponible lorsque vous require yaml
. J'ai également essayé d'utiliser la méthode Enumerable collect
mais je suis devenu confus lorsque j'ai dû parcourir la valeur (un autre hachage).
J'essaie d'utiliser " Conversion de hachage en chaîne en Ruby " comme référence. Ma pensée était alors d'alimenter cela en YAML::load
et cela générerait le YAML que je voulais.
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 Object a une méthode to_yaml. Je l'ai utilisé et il a généré correctement le fichier YAML.
Non, non.
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 le to_yaml
méthode sur un hachage pour cela, je crois après vous require yaml