构造嵌套的 OpenStruct 对象

Fel*_*ger 5 ruby openstruct

我必须模仿 Google API 响应并创建一个可通过.如下方式遍历的 2 级深层数据结构:

=> user.names.first_name
Run Code Online (Sandbox Code Playgroud)

鲍勃

有没有比这更聪明/更好的方法:

 user = OpenStruct.new(names: OpenStruct.new(first_name: 'Bob'))
Run Code Online (Sandbox Code Playgroud)

小智 10

这个方法虽然粗暴但是有效

require 'ostruct'
require 'json'
# Data in hash
data = {"names" => {"first_name" => "Bob"}}
result = JSON.parse(data.to_json, object_class: OpenStruct)
Run Code Online (Sandbox Code Playgroud)

另一种方法是向 Hash 类本身添加方法,

class Hash
  def to_openstruct
    JSON.parse to_json, object_class: OpenStruct
  end
end
Run Code Online (Sandbox Code Playgroud)

使用上面的方法你可以将你的哈希转换为openstruct

data = {"names" => {"first_name" => "Bob"}}
data.to_openstruct
Run Code Online (Sandbox Code Playgroud)