Ik moet een hash, zoals hieronder weergegeven, converteren naar leesbare YAML. Het lijkt erop dat ik YAML::load
een string kan invoeren, maar ik denk dat ik deze eerst moet converteren naar zoiets als dit:
hostname1.test.com:
public: 51
private: 10
{"hostname1.test.com"=>
{"public"=>"51", "private"=>"10"},
"hostname2.test.com"=>
{"public"=>"192", "private"=>"12"}
}
Ik weet echter niet precies hoe ik die conversie naar die string effectief moet uitvoeren.
Ik heb de HASH-documentatie bekeken en kon niets vinden voor to_yaml
. Ik vond het door te zoeken naar to_yaml
die beschikbaar komt wanneer je require yaml
. Ik heb ook geprobeerd de Enumerable-methode collect
te gebruiken, maar raakte in de war toen ik de waarde moest herhalen (nog een hash).
Ik probeer “Hash converteren naar string in Rubyte gebruiken ” als een referentie. Mijn gedachte was toen om dat in YAML::load
in te voeren en dat zou de YAML genereren die ik wilde.
Antwoord 1, autoriteit 100%
Zo zou ik het doen:
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
Welke uitgangen:
---
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'
De klasse Object heeft een methode to_yaml. Ik heb dat gebruikt en het genereerde het YAML-bestand correct.
Nee, dat doet het niet.
Dit is van een vers geopende IRB-sessie:
Object.instance_methods.grep(/to_yaml/)
=> []
require 'yaml'
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
Antwoord 2, autoriteit 9%
Je kunt hiervoor volgens mij de to_yaml
methode op een hash gebruiken nadat je require yaml
Antwoord 3
U kunt YAML.dump
:
YAML.dump(a: 2, b: 1)
=> "---\n:a: 2\n:b: 1\n
Een voordeel van YAML.dump
ten opzichte van to_yaml
is dat het gemakkelijker is om af te leiden wat de code doet, omdat de meeste mensen van links naar rechts lezen.