JSON ライブラリを利用できるようにするにlibjson-ruby
は、パッケージ マネージャーからインストールする必要がある場合があります。
「json」ライブラリを使用するには:
require 'json'
オブジェクトを JSON に変換するには (これら 3 つの方法は同等です):
JSON.dump object #returns a JSON string
JSON.generate object #returns a JSON string
object.to_json #returns a JSON string
JSON テキストをオブジェクトに変換するには (これら 2 つの方法は同等です):
JSON.load string #returns an object
JSON.parse string #returns an object
独自のクラスのオブジェクトの場合は、少し難しくなります。次のクラスでは、to_json は のようなものを生成します"\"#<A:0xb76e5728>\""
。
class A
def initialize a=[1,2,3], b='hello'
@a = a
@b = b
end
end
これはおそらく望ましくありません。オブジェクトを効果的に JSON としてシリアル化するには、独自の to_json メソッドを作成する必要があります。これを行うには、from_json クラス メソッドが役立ちます。次のようにクラスを拡張できます。
class A
def to_json
{'a' => @a, 'b' => @b}.to_json
end
def self.from_json string
data = JSON.load string
self.new data['a'], data['b']
end
end
「JSONable」クラスから継承することで、これを自動化できます。
class JSONable
def to_json
hash = {}
self.instance_variables.each do |var|
hash[var] = self.instance_variable_get var
end
hash.to_json
end
def from_json! string
JSON.load(string).each do |var, val|
self.instance_variable_set var, val
end
end
end
次に、JSON にシリアル化し、JSON 文字列として保存された保存状態をオブジェクトにコピーするために使用できobject.to_json
ますobject.from_json! string
。