JSON.parse
の結果は基本的にはHashになると思うのですが、任意のClassのオブジェクトで取得したい場合に、JSON.parse
の引数object_class
を利用すると簡単に実現出来ることを知らなかったのでメモしておきます📝
やり方は以下の通りでdef []=(key, value)
を持つ任意のClassを作成してあげて、JSON.parse
の引数object_class
にそのClassを渡して上げるだけです。
require 'json' json = <<~JSON [ { "title": "foo 1", "body": "bar 1" }, { "title": "foo 2", "body": "bar 2" } ] JSON class Article attr_accessor :title, :body def initializer(title, body) @title = title @body = body end def []=(key, value) instance_variable_set("@#{key}", value) end end p JSON.parse(json, object_class: Article) # => [#<Article:0x00007fcad21f46c8 @title="foo 1", @body="bar 1">, #<Article:0x00007fcad21f44c0 @title="foo 2", @body="bar 2">]
Ruby便利ですね✨