SORU
16 Aralık 2010, PERŞEMBE


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
16 Aralık 2010, PERŞEMBE


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • BetterCoder

    BetterCoder

    17 Aralık 2012
  • wowchick16

    wowchick16

    17 Mart 2007