我有一个 OpenStruct 对象,需要转换为 JSON 数据。
样本哈希(来自 RSPEC 助手):
def test_order
{
"id": 505311428702,
"email": "test@gmail.com",
"closed_at": "",
"discount_codes": {
"id": 507328175,
"text": "test"
}
}
end
我正在使用以下函数进行递归:
def to_recursive_ostruct(hash)
OpenStruct.new(hash.each_with_object({}) do |(key, val), memo|
memo[key] = val.is_a?(Hash) ? to_recursive_ostruct(val) : val
end)
end
对于 ex to_recursive_ostruct(test_order),将返回:
<OpenStruct id=505311428702, email="test@gmail.com", closed_at="", ...>
转换后,使用OpenStructObject.marshal_dump:
{
:id=>505311428702, :email=>"test@gmail.com", :closed_at=>"",
discount_codes=>#<OpenStruct id=507328175, text= "test">}
}
OpenStructObject.marshal_dump在第一级为我提供了正确的数据,
我还希望嵌套数据被转换。
我真正需要的是:
{:id=>505311428702, :email=>"test@gmail.com", :closed_at=>"", :discount_codes=>{:id=>507328175, :text=> "test"} }
请帮助,提前谢谢。