Чтобы библиотека 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
Затем вы можете использовать object.to_json
для сериализации в JSON и object.from_json! string
для копирования сохраненного состояния, которое было сохранено как строка JSON, в объект.