Amagramming

再帰的なOpenStructを作る

March 08, 2019

hashをOpenStructにする際に、 OpenStruct.newでは1階層分しかOpenStructにならないのをどうするか問題
recursice-open-structみたいな新しいgemも入れたくない。

▼ 結論

require 'ostruct'
require 'json'

hash = { a: { b: 1 } }

p OpenStruct.new(hash) # => #<OpenStruct a={:b=>1}>
p JSON.parse(hash.to_json, object_class: OpenStruct) # => #<OpenStruct a=#<OpenStruct b=1>>

一度hashをJSONにしてからJSONとしてパースすると、再帰的に子の要素まですべてOpenStructになる。便利。

hashではなく元々JSONのstring等であれば,
to_json せずに

JSON.parse(response.body, object_class: OpenStruct)

でOK


Written by rnitta who lives and works in Tokyo building nothing.
You can follow him on Twitter