Ruby ile kayadan sonra kayaya çarpıyorum ama kavga etmeye devam ediyorum. Bugün bir özniteliği özümseme sorunum var.Bir sınıf özniteliğinin sınıfını bulmanın en iyi yolu
Nesneleri JSON'a serileştirmek için çalışıyorum ve nesnelerim öznitelikler öğesinde Nesne içinde nesne olan bir nesne ve adres bir nesnedir.
module OrderSet
class OrderObject
attr_accessor :items, :url, :email, :address, :id
def initialize args = nil
if args != nil
args.each do |k, v|
instance_variable_set("@#{k}", v) unless v.nil?
end
end
end
def to_json
hash = {}
self.instance_variables.each do |var|
# [1..-1] is to get rid of the leading @ from instance variables. This is so the API knows the variables.
hash[var[1..-1]] = self.instance_variable_get var
end
hash.to_json
end
end
end
bu serialize, bu karmaşa için özür böyle bir JSON (ile biter, ancak geçerli bir JSON değil gibi biçimlendirmek olmaz ...:
"{"address":"{\"name\":\"Ruby\",\"line1\":\"StoneStreet\",\"city\":\"Gemstones\",\"country\":\"The WOrld\",\"postCode\":\"4004VC\"}","items":"[\"{\\\"productId\\\":\\\"canvas_a60x60\\\",\\\"files\\\":\\\"{\\\\\\\"content\\\\\\\":\\\\\\\"http://i.imgur.com/uHZfjIU.jpg\\\\\\\"}\\\",\\\"quantity\\\":10,\\\"pageCount\\\":1,\\\"metaData\\\":\\\"test\\\"}\"]","email":"[email protected]"}"
nasıl .
:"{"address":"{"name":"Ruby", "line1":"StoneStreet", "city":"Gemstones", "country":"The WOrld", "postCode":"4004VC" }","items":"["{
"productId":"canvas_a60x60", "files":"{"content":"http://i.imgur.com/uHZfjIU.jpg" }","quantity":10, "pageCount":1, "metaData":"test" }"]", "email":"[email protected]" }"
Şimdi her sınıf kendi to_json yöntemi var ve bu çağrılır ve orijinaldir to_json yönteminin karma koymak gerekir birkaç çözümler gelmiş: o bakmak gerekiyor
- bir
object.is_a?(ClassName)
- (i toplamda yaklaşık 20 sınıfları içeren, 4 modül var, o yüzden birincisi ikincisi çok daha uzundur) bir taban nesnesi yapmak
- modülünü kontrol edin mı, uzatmak Buna diğer tüm nesneler, temel nesnesinin bir alt öğesi olup olmadığını kontrol edin ve to_json'u buna göre çağırın (to_json'u parrent'e koyarak)
- Belki de statik bir yöntemdir, ancak çağrıların çalışıp çalışmadığını bilmiyorum
instance_variables
[değiştir] woops, soruyu sormayı unutmuş, yukarıdakilerden daha iyi bir yol var mıdır ve değilse, yukarıdakilerden hangisi en iyisidir? Basit bir test olarak, denemek ve aslında tüm bu altında oluyor bekliyorsanız ne yazacağız meta programlama bir çok kullandığınız yana
Bu öğeler sınıfının kontrol edilmesi ile JSON serileştirme arasındaki bağlantı nedir? –
@FrederickCheung Özniteliklerde (kendi öznitelikleriyle) bulunan sınıfların düzgün bir şekilde serileştirilmemesi. Sağlanan JSON'a bakarsanız, ters eğik çizgilerden oluşan bir tekne yükü görürseniz, bunlar yalnızca kendim olan ve özniteliklere eklenen nesneler üzerinde gerçekleşir. Ama ihtiyacım olan şey bu değil. Verilen JSON'ı geçerli hale getireceğim ve nasıl görünmesi gerektiği konusunda bilgi vereceğim. O zaman görebileceksiniz. –
Çıktınız, to_json çağrılarak değerlerin zaten dizeler oluşturulduğu bir hash üzerinde to_json çağrmışsınız gibi görünüyor. Belki de çocuk sınıfları üzerinde to_json uygulaması hatalı. –