【问题标题】:Ruby Hash converted to JSON only shows object names转换为 JSON 的 Ruby 哈希仅显示对象名称
【发布时间】:2012-12-05 16:40:16
【问题描述】:

我有一个想要转换为 JSON 的 Ruby FlickRaw 响应。以下是其结构的一部分:

#<FlickRaw::Response:0x7fbd11088678
    @h = {
               "id" => "72157628092176654",
          "primary" => "6332013810",
            "owner" => "8623220@N02",
        "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":"8623220@N02",
"ownername":"The Library of Congress",
"photo":["#<FlickRaw::Response:0x007fbd1106a628>","#<FlickRaw::Response:0x007fbd110704d8>","#<FlickRaw::Response:0x007fbd11079c40
...

如您所见,它仅输出#&lt;FlickRaw::Response&gt; 对象而不是实际内容。所以,它只是停止在那里递归。如何让它实际输出类似于我从上面的awesome_print 获得的输出,其中也显示了各个照片字段?

我尝试了以下方法,这让我得到了照片数组的正确表示:

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

但这似乎相当复杂。有没有更简单的方法可以一次性将完整响应格式化为 JSON,而无需先修复照片数组?

【问题讨论】:

  • photos.photo.map(&amp;:to_hash).to_json? :)
  • 谢谢,这修复了photo 数组,但如果可能的话,我希望一次性将整个响应转换为 JSON。我澄清了那句话!

标签: ruby json hash flickr


【解决方案1】:

显然FlickRaw::Response 类型没有默认的 JSON 表示。

您有两个选择,或者像您一样将照片转换为哈希值,或者使用 to_json 方法对 FlickRaw::Response 类进行猴子补丁

class FlickRaw::Response
  def to_json
    to_hash
  end
end

应该可以解决问题。

【讨论】:

  • 它不适用于嵌套的 FlickRaw::Response 对象,在下一级仍然只有“#object_names”
猜你喜欢
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2011-06-29
  • 2017-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多