Nasıl bir yakut karma nesnesi JSON dönüştürmek için?


340

Nasıl bir yakut karma nesnesi JSON dönüştürmek için? Bu yüzden aşağıdaki örneği deniyorum ve işe yaramıyor?

RubyDoc'a bakıyordum ve açıkçası Hashnesnenin bir to_jsonyöntemi yok. Ama Rails'in desteklediği active_record.to_jsonve desteklediği blogları okuyorum hash#to_json. Anlayabildiğim ActiveRecordbir Rails nesnesidir, ancak HashRails'e özgü değildir, saf bir Ruby nesnesidir. Yani Rails bir yapabilirsin hash.to_json, ama saf Ruby değil ??

car = {:make => "bmw", :year => "2003"}
car.to_json

Yanıtlar:


563

Ruby'nin sayısız inceliklerinden biri, mevcut sınıfları kendi yöntemlerinizle genişletme olasılığıdır. Buna "sınıf yeniden açma" veya maymun yamalama denir (ikincisinin anlamı değişebilir ).

Buraya bir göz atın:

car = {:make => "bmw", :year => "2003"}
# => {:make=>"bmw", :year=>"2003"}
car.to_json
# NoMethodError: undefined method `to_json' for {:make=>"bmw", :year=>"2003"}:Hash
#   from (irb):11
#   from /usr/bin/irb:12:in `<main>'
require 'json'
# => true
car.to_json
# => "{"make":"bmw","year":"2003"}"

Gördüğünüz gibi, ihtiyaç bizim için jsonsihirli bir yöntem getirdi .to_jsonHash


2
söyleyebileceğim tek şey wow :) da çok teşekkürler !! temelde dinamik olarak json sınıfını genişletmek mümkün oldu ??
kapso

1
Ruby nesnesi ile aynı şeyi denedim ve çalışmıyor ?? >> 'json' => true >> sınıf Personeli >> attr_accessor: fname,: lname >> end => nil >> p = Person.new => # <Kişi: 0x101155f70> >> p.fname = "Fatura "=>" Fatura ">> p.lname =" Shine "=>" Shine ">> p.to_json =>" \ "# <Kişi: 0x101155f70> \" "
kapso

10
Hayır, hayır, birisi rasgele bir sınıf nesnesinin JSON'a nasıl serileştirilmesi gerektiğini kodlamalıdır. Onlar için yaptı Hashve mücevher Arraysınıfları json, ama sınıf Personsadece bir düz Object. Ama Hashbunun yerine miras alabilirsiniz . Eğer yönetmezseniz yeni bir soru açabilirsiniz.
Mladen Jablanović

Teşekkürler. İşte yeni soru, herhangi bir yardım takdir edilecektir. Teşekkürler. stackoverflow.com/questions/3226054/…
kapso

IRB tipi çıktı gibi görünen şeyleri gösteriyorsunuz. DateTime nesnesi için çalışmak için hash # to_json almaya çalışıyordum. Bu yazı sayesinde anladım. Ama p date_json ile inceledim "{\" year \ ": 2013, \" mon \ ": 7, \" mday \ ": 16, \" hour \ ": 13, \ "dk \": 54, \ "sn \": 32, \ "bölge \": \ "- 05:00 \", \ "ofset \": - 18000} " anahtar sembolleri dize olarak ve elbette verilerin değişmediğini gösterir. Tekrar teşekkürler. Üzgünüm ama çok geç kaldım.
Douglas G. Allen

19
require 'json/ext' # to use the C based extension instead of json/pure

puts {hash: 123}.to_json

6

Ayrıca şunları kullanabilirsiniz JSON.generate:

require 'json'

JSON.generate({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

Veya takma adı JSON.unparse:

require 'json'

JSON.unparse({ foo: "bar" })
=> "{\"foo\":\"bar\"}"

3

Dosyanızın üstüne aşağıdaki satırı ekleyin

require 'json'

Sonra şunları kullanabilirsiniz:

car = {:make => "bmw", :year => "2003"}
car.to_json

Alternatif olarak şunları kullanabilirsiniz:

JSON.generate({:make => "bmw", :year => "2003"})

-1

Dahil etmelisiniz jsonDosyanıza

Örneğin,

require 'json'

your_hash = {one: "1", two: "2"}
your_hash.to_json

Hakkında daha fazla bilgi için jsonaşağıdaki linki ziyaret edebilirsiniz. Json Öğrenme

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.