我需要将下面提供的散列转换为可读的YAML.看起来我可以输入YAML::load个字符串,但我想我需要先把它转换成这样的东西:

hostname1.test.com:
  public: 51
  private: 10

{"hostname1.test.com"=>
   {"public"=>"51", "private"=>"10"},
 "hostname2.test.com"=>
   {"public"=>"192", "private"=>"12"}
}

但我不确定如何有效地将其转换为字符串.

我查了一下散列文件,没有找到to_yaml美元的任何东西.我通过搜索to_yaml找到了它,当你搜索require yaml时,它就变得可用了.我还try 使用可枚举方法collect,但当我需要迭代该值(另一个哈希)时,我感到困惑.

我想用"Converting hash to string in Ruby"作为参考.我当时的 idea 是将其输入YAML::load,然后生成我想要的YAML.

推荐答案

我会这样做:

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'

对象类有一个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]

Ruby相关问答推荐

如何保证散列中的对象不完全相同

扫描不带空格的字符串中的单词

鲁比.METHOD_MISSING+SEND对于带有命名参数的混合参数失败

Ruby 中无法解释的撬动行为

为什么 slurping文件不是一个好习惯?

为什么 Range 在下降时不起作用?

如何将参数传递给 array.map 快捷方式?

按可能为 nil 的属性对对象的 ruby​​ 数组进行排序

class_eval <<-"end_eval", __FILE__, __LINE__ 在 Ruby 中是什么意思?

try 学习/理解 Ruby 的 setter 和 getter 方法

与 String 相比,在 Ruby 中使用 StringIO 有哪些优势?

无法将 RVM 安装的 Ruby 与 sudo 一起使用

Ruby 中的 to_s 与 to_str(以及 to_i/to_a/to_h 与 to_int/to_ary/to_hash)

常见的 Ruby 习语

解析带有标题字段的 CSV 文件作为每行的属性

等号 ('=') 放在方法定义中的方法名称之后有什么作用?

将哈希传递给函数 ( *args ) 及其含义

从 'mm/dd/yyyy' 格式解析 ruby​​ DateTime

Ruby 类继承:什么是`<<`(双倍小于)?

查找两个数组的共同点