将 Ruby 哈希转换为 YAML

Posted

技术标签:

【中文标题】将 Ruby 哈希转换为 YAML【英文标题】:Convert Ruby Hash into YAML 【发布时间】:2013-07-08 17:26:55 【问题描述】:

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

【问题讨论】:

你读过Ruby的YAML documentation吗? "Yaml Cookbook at the YamlForRuby site 怎么样?另外,您提供的哈希无效。它应该是哈希数组还是哈希哈希? 您还应该提供代码来显示您尝试过的内容,以及对无效内容的说明。 -1 表示没有表现出任何努力。 添加了我在找到 to_yaml 方法之前所做的工作。 to_yaml 默认情况下不属于 Hash 或 Object 或任何类。你HAVErequire 'yaml'脚本中的某个地方,或者你需要的地方,让YAML扩展对象、哈希和其他方法。请参阅我的答案的编辑。 【参考方案1】:

你可以使用YAML.dump:

YAML.dump(a: 2, b: 1)
=> "---\n:a: 2\n:b: 1\n

YAML.dump 相对于to_yaml 的一个优势是更容易推断代码在做什么,因为大多数人是从左到右阅读的。

【讨论】:

【参考方案2】:

您可以在哈希上使用to_yaml 方法,我相信在您之后require yaml

【讨论】:

哈希没有to_yaml 方法。 Object does not have a to_yaml method。只有YAML 类有它,它会在需要时扩展其他类。【参考方案3】:

我会这样做:

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]

【讨论】:

以上是关于将 Ruby 哈希转换为 YAML的主要内容,如果未能解决你的问题,请参考以下文章

将字符串转换为哈希符号的最佳方法

ruby 将CloudFormation模板从JSON转换为YAML

Ruby 将对象转换为哈希

如何将 JSON 转换为 Ruby 哈希

将 Nokogiri 文档转换为 Ruby 哈希

ruby 将嵌套数组转换为哈希