2010-07-06 87 views
257

如何將紅寶石散列對象轉換爲JSON?所以我在&以下嘗試這個例子,它不起作用?如何將紅寶石哈希對象轉換爲JSON?

我在看RubyDoc,顯然Hash對象沒有to_json方法。但我正在閱讀Rails支持active_record.to_json的博客,同時也支持hash#to_json。我可以理解ActiveRecord是一個Rails對象,但Hash不是Rails原生的,它是一個純Ruby對象。所以在Rails中,你可以做一個hash.to_json,但不是純粹的Ruby?

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

回答

449

Ruby的衆多優點之一是可以使用自己的方法擴展現有的類。這就是所謂的「班重開」或猴修補(後者的意思是can vary,雖然)。

所以,在這裏看看:

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"}" 

正如你所看到的,需要json已經奇蹟般地帶來了方法to_json我們Hash

+2

我只能說是哇:)也非常感謝! 所以基本上我能夠動態擴展json類? – kapso 2010-07-06 16:49:05

+1

我用Ruby對象試過同樣的事情,它不起作用? >>需要 'JSON' =>真 >>類Person >> attr_accessor:FNAME,:L-NAME >>端 =>零 >> P = Person.new =>#<人: 0x101155f70> >> p.fname = 「比爾」 => 「比爾」 >> p.lname = 「閃耀」 => 「閃耀」 >> p.to_json => 「\」 #<人: 0x101155f70> \「」 – kapso 2010-07-06 16:56:52

+8

不,不需要,有人必須編寫如何將任意類的對象序列化爲JSON。他們在'json' gem中爲'Hash'和'Array'類做了這個,但是你的類Person只是一個普通的Object。但是你可以繼承'Hash'。如果你不管理,你可以開一個新的問題。 – 2010-07-06 17:05:59

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

puts {hash: 123}.to_json