我怎么可以转换嵌套YAML在Ruby的嵌套数组和OpenStructs(How Can I Conv

2019-10-18 06:01发布

我应该如何转换一系列嵌套的散列(嵌套到任意深度),以一系列嵌套OpenStructs的? 我加载在一个大YAML文件,我不喜欢accessing['everything']['like']['this']

我已经找到了几个部分解决方案使用谷歌,但我认为这将是一个不错的问题在这里。

下面是我从找到的解决方案之一http://andreapavoni.com/blog/2013/4/create-recursive-openstruct-from-a-ruby-hash :

# deep_struct.rb
require 'ostruct'

class DeepStruct < OpenStruct
  def initialize(hash=nil)
    @table = {}
    @hash_table = {}

    if hash
      hash.each do |k,v|
        @table[k.to_sym] = (v.is_a?(Hash) ? self.class.new(v) : v)
        @hash_table[k.to_sym] = v

        new_ostruct_member(k)
      end
    end
  end

  def to_h
    @hash_table
  end

end

该解决方案的问题是,它没有考虑阵列考虑。

Answer 1:

还有就是溶液( https://github.com/jsuchal/hashugar )我经常使用。

opts = Hashugar.new({:a => 1, 'b' => {:c => 2, :d => [3, 4, {:e => 5}]}})

但是你也需要做的:

opts.b.d.last.e

我不明白你怎么想命名阵列的干将。 作为奥雅纳Rakshit赛义德:给我们YAML例子,预期的输出或行为。



文章来源: How Can I Convert Nested YAML to nested Arrays and OpenStructs in Ruby