2012-12-05 48 views
1

我有一個Ruby FlickRaw響應,我想轉換爲JSON。下面是其結構的一部分:Ruby哈希轉換爲JSON只顯示對象名稱

#<FlickRaw::Response:0x7fbd11088678 
    @h = { 
       "id" => "72157628092176654", 
      "primary" => "6332013810", 
      "owner" => "[email protected]", 
     "ownername" => "The Library of Congress", 
      "photo" => [ 
      [ 0] #<FlickRaw::Response:0x7fbd1106a628 
       @h = { 
          "id" => "6332007340", 
         "secret" => "4d92733d70", 
         "server" => "6217", 
         "farm" => 7, 
         "title" => "Woodrow Wilson, Twenty-Eighth President of the United States (LOC)", 
        "isprimary" => "0" 
       }, 
       attr_reader :flickr_type = "photo" 
      >, 

要將其轉換成JSON,我想簡單地採取response.to_hash.to_json,但這會導致如下:

=> "{"id":"72157628092176654", 
"primary":"6332013810", 
"owner":"[email protected]", 
"ownername":"The Library of Congress", 
"photo":["#<FlickRaw::Response:0x007fbd1106a628>","#<FlickRaw::Response:0x007fbd110704d8>","#<FlickRaw::Response:0x007fbd11079c40 
... 

正如你所看到的,它僅僅輸出#<FlickRaw::Response>對象而不是實際的內容。所以,它只是停止在那裏遞歸。我怎樣才能得到它實際上輸出的東西,如上面的awesome_print所得到的輸出,也顯示了單個照片字段?

我試過以下,這讓我的正確表示了光陣列:

photos.photo.map { |h| h.to_hash }.to_json 

但似乎相當複雜。任何一種更簡單的方式來將完整響應格式化爲JSON,而無需先修復照片數組?

+1

'photos.photo.map(&:to_hash).to_json'? :) – 2012-12-05 16:48:23

+0

謝謝,這修復了'照片'數組,但我希望一次性將整個響應轉換爲JSON,如果可能的話。我澄清了那句話! – slhck

回答

3

顯然,類型FlickRaw::Response沒有默認的JSON表示。

你有兩個選擇,要麼像你一樣變換照片哈希值,或猴子修補FlickRaw::Response類與to_json方法在

class FlickRaw::Response 
    def to_json 
    to_hash 
    end 
end 

應該解決這個問題。

+0

它不適用於嵌套的FlickRaw :: Response對象,在下一級別仍然只有「#object_names」 – static

相關問題