再帰的な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