【发布时间】:2013-06-07 18:39:56
【问题描述】:
我应该如何将一系列嵌套哈希(嵌套到任意深度)转换为一系列嵌套 OpenStructs? 我正在加载一个大的 YAML 文件,但我不喜欢 accessing['everything']['like']['this'] .
我使用 Google 找到了一些部分解决方案,但我认为这会成为一个很好的问题。
这是我从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
这个解决方案的问题是它没有考虑数组。
【问题讨论】:
-
解决方案不起作用吗?
-
@SergioTulentsev 是的,他们似乎还可以,但我很想看看人们正在使用的其他解决方案,这是一个尚未被问到的问题。
-
你为什么不发布几个并告诉你为什么不喜欢它们?
-
您期望数组的哪种行为?
-
@tlewin 反序列化 YAML 由数组和哈希组成,所以我想要数组和 OpenStructs。
标签: ruby hash nested object-graph openstruct