我需要将下面提供的哈希转换为可读的YAML。看起来我可以提供YAML::load
一个字符串,但我想我需要先将它转换成这样的字样:
hostname1.test.com:
public: 51
private: 10
{"hostname1.test.com"=>
{"public"=>"51", "private"=>"10"},
"hostname2.test.com"=>
{"public"=>"192", "private"=>"12"}
}
我不确定如何有效地转换为该字符串。
我查看了HASH文档,找不到to_yaml
的任何内容。我通过搜索您to_yaml
时可用的require yaml
找到了它。我也尝试使用Enumerable方法collect
,但在需要迭代值(另一个哈希)时感到困惑。
我正在尝试使用“Converting hash to string in Ruby”作为参考。我的想法是将其提供给YAML::load
,这将生成我想要的YAML。
答案 0 :(得分:55)
以下是我的表现:
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
哪个输出:
---
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'
Object类有一个to_yaml方法。我用它,它正确生成了YAML文件。
不,它没有。
这是来自一个刚刚开放的IRB会议:
Object.instance_methods.grep(/to_yaml/)
=> []
require 'yaml'
=> true
Object.instance_methods.grep(/to_yaml/)
=> [:psych_to_yaml, :to_yaml, :to_yaml_properties]
答案 1 :(得分:5)
您可以在哈希上使用to_yaml
方法,我相信require yaml
答案 2 :(得分:0)
您可以使用YAML.dump
:
bigIncrements
YAML.dump(a: 2, b: 1)
=> "---\n:a: 2\n:b: 1\n
胜过YAML.dump
的一个优势是,由于大多数人从左到右阅读,因此更容易推断代码在做什么。