将Ruby Hash转换为YAML

时间:2013-07-10 16:52:51

标签: ruby hash yaml

我需要将下面提供的哈希转换为可读的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。

3 个答案:

答案 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的一个优势是,由于大多数人从左到右阅读,因此更容易推断代码在做什么。