Pour que la bibliothèque JSON soit disponible, il se peut que vous deviez installer libjson-ruby
à partir de votre gestionnaire de paquets.
Pour utiliser la bibliothèque 'json' :
require 'json'
Pour convertir un objet en JSON (ces 3 façons sont équivalentes) :
JSON.dump object #returns a JSON string
JSON.generate object #returns a JSON string
object.to_json #returns a JSON string
Pour convertir du texte JSON en objet (ces 2 façons sont équivalentes) :
JSON.load string #returns an object
JSON.parse string #returns an object
Ce sera un peu plus difficile pour les objets de vos propres classes. Pour la classe suivante, to_json produira quelque chose comme "\"#<A:0xb76e5728>\""
.
class A
def initialize a=[1,2,3], b='hello'
@a = a
@b = b
end
end
Ce n'est probablement pas souhaitable. Pour sérialiser efficacement votre objet en JSON, vous devez créer votre propre méthode to_json. Pour aller de pair avec cela, une méthode de classe from_json serait utile. Vous pourriez étendre votre classe de la manière suivante :
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
Vous pouvez automatiser cette opération en héritant d'une classe "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
Vous pouvez alors utiliser object.to_json
pour sérialiser en JSON et object.from_json! string
pour copier l'état sauvegardé sous forme de chaîne JSON dans l'objet.