2011-01-23 32 views
5

kullanarak JSON içine özel bir nesne dönüştürme JSON gem ile JSON ayrıştırma ve JSON oluşturmak için nasıl öğreniyorum. Ben bir veri yığını oluşturmak ve JSON içine kolayca oluşturmak mümkün; bununla birlikte, bir sınıf örneğini (örneğin, bir İnsan örneği gibi) almak ve tüm örnek değişkenlerini bir karma içinde JSON'a dönüştürmek söz konusu olduğunda bir beyin osurduğum için yaşıyorum.JSON gem

require "json" 

class Person 

    def initialize(name, age, address) 
    @name = name 
    @age = age 
    @address = address 
    end 

    def to_json 

    end 


end 

p = Person.new('John Doe', 46, "123 Elm Street") 
p.to_json 

ben bir kişi nesnesi almak ve JSON dönüştürülmüş örnek değişkenleri de hepsine sahip böylece bir .to_json yöntemi oluşturmak istiyorum:

Bu

ben sorun yaşıyorum örnektir. Yapmam gereken şey, tüm Kişinin örnek değişkenlerini almak, onları bir karmaşaya koymak ve daha sonra JSON.generate(hash)'u aramaktır. Şu an bunun nasıl yapılacağına dair bir beyin fırtınası yaşıyorum. Yani birisi bana to_json yöntemini tamamlamada yardımcı olabilir veya belki de daha iyi bir uygulama yöntemi önerebilir mi? Teşekkürler!

def to_json(*a) 
    { 
    'json_class' => self.class.name, 
    'data'   => Your data 
    }.to_json(*a) 
end 

json_class anahtar verileri geçirmek için ne sınıf belirlemek için JSON taş tarafından kullanılır:

+0

Rails kullanıyorsanız, bu yardımın sizin için yapıldığı ve ' .to_hash' veya' .to_json' işlevlerini istediğiniz gibi kolayca alabilirsiniz. Author_list işlemi için kaynağımı gözden geçirin: https://github.com/shybovycha/strong-sword/blob/master/app/controllers/quotes_controller.rb#L29 – shybovycha

cevap

11

İlk sen doğru temel yapısını kullanmak emin olmak gerekir. *a parametresi, JSON geminin geçtiği, genellikle dersleriniz için önemsiz olan tüm argümanları içerir, böylece sadece hash'ın to_json aramasına geçebilirsiniz. Veri karma veya bir dizi olan depolamak için basit yollarından Sonraki:

'data'   => [@name, @age, @address] 

veya

'data'   => { 'name' => @name, 'age' => @age, 'address' => @address 

ilk hızlı olabilir ve ikinci bir iken, yazmaya self.json_create yöntem biraz daha kolay hale getirir Veri yapısını değiştirirseniz ve eski JSON nesnelerini yüklemek istiyorsanız geriye doğru uyumlu hale getirmek çok daha kolaydır.