使用Ruby创建包含其他对象数组的一个对象的JSON字符串的最佳实践?

时间:2011-02-09 11:30:30

标签: ruby-on-rails ruby json

创建包含对象数组(B类对象)的一个对象(类A的对象)的JSON字符串有什么好的做法?我特别关注类A to_json 方法的实现。

假设A类看起来如下:

class A
  attr_accessor :items
  def initialize()
    @items = Array.new
  end
  def to_json(*a)
    ?SECRET OF THE DAY?
  end
end

和B级:

class B
  def to_json(*a)
    {"class B" => "class B"}.to_json(*a)
  end
end

到目前为止,我得到的最佳解决方案是:

def to_json(*a)
  json = Array.new
  @items.each do |item|
    json << item.to_json(*a)
  end
  {"class A" => json}.to_json(*a)
end

假设A类对象的数组中只有一个项,则生成的JSON字符串如下所示:

{“A类”:[“{\”B类\“:\”B类“}}”}}

我相信我们可以做得更好吗?

2 个答案:

答案 0 :(得分:1)

我会这样做

 def to_json(*a)
      {"class A" => @items}.to_json(*a)
 end

您的方法存在的问题是您的@items数组包含字符串,而不是对象。在这种情况下,你的to_json将创建一个字符串数组,而不是一个对象数组。

答案 1 :(得分:1)

将json / json_pure重新安装/升级到1.5.1最终解决了IOError异常问题。

使用: Rails 3.0.3 ruby 1.9.2p136(2010-12-25修订版30365)[i386-darwin9.8.0] json 1.5.1 json_pure 1.5.1

有关进一步指导,请参阅http://www.ruby-forum.com/topic/1052511#new