Ruby nesneleri ve JSON serileştirme (Raylar olmadan)
Ruby JSON serileştirme manzara anlamaya çalışıyorum. Ruby yeniyim.
Eğer Raylar ile çalışıyorsanız hiç de iyi değil JSON serileştirme seçenekleri var mı?
Bu cevap nereye gidiyor (Raylar için)gibi görünüyor How to convert a Ruby object to JSON?
Json mücevher kendi to_json yöntemi yazmak zorunda gibi görünüyor. Diziler ve karma (belgeleri ile çalışır diyor)ile çalışmak to_json almak mümkün olmamıştır. Json gem sadece nesne üzerinde yansıtmak ve varsayılan seri hale getirme stratejisi kullanmaz bir nedeni var mı? To_yaml işleri (tahmin) nasıl bu değil
CEVAP
Kullanılabilir olması için JSON kütüphane, Paket Yöneticisi libjson-ruby
yüklemeniz gerekebilir.
Kullanmak için 'json' kütüphane:
require 'json'
Bir nesnenin JSON dönüştürmek (bu 3 yolu eşdeğerdir):
JSON.dump object #returns a JSON string
JSON.generate object #returns a JSON string
object.to_json #returns a JSON string
Bir nesne (bu 2 yolu eşdeğerdir) JSON metin dönüştürmek için:
JSON.load string #returns an object
JSON.parse string #returns an object
Kendi sınıflarından nesneler için biraz daha zor olacak. Aşağıdaki sınıf, to_json "\"#<A:0xb76e5728>\""
gibi bir şey üretmek için.
class A
def initialize a=[1,2,3], b='hello'
@a = a
@b = b
end
end
Bu muhtemelen arzu edilir değil. Etkili bir nesne olarak JSON serialise için, kendi to_json yönteminizi oluşturmanız gerekir. Bununla beraber, from_json sınıf bir yöntem yararlı olacaktır. Sizin sınıf gibi çok uzatmak:
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
Bir devralmasını tarafından bu otomatize edebilirsin 'JSONable' class:
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
O zaman object.to_json
JSON için serialise ve 15* *nesnesine JSON dize olarak kaydedilmiş kaydedilmiş devlet kopyalamak için kullanabilirsiniz.
Nasıl Ruby on Rails ile JSON ayrıştırm...
Ruby on Rails - çoklu modeller için Re...
Raylar üzerinde Ruby Veritabanı için M...
Nasıl bir başlangıç ve bitiş bloğu olm...
Özel SSH-key veya Ruby olmadan kabuk k...