Ruby to_json on对象输出实例变量

时间:2012-10-03 11:58:50

标签: ruby json sinatra

我正在使用Sinatra并尝试使用'json'gem并调用.to_json方法在JSON中输出对象。我希望输出为JSON,其中包含attr_reader部分中的符号及其值。

这是我的代码。我是否需要做一些特别的事情才能让它发挥作用?

require "sinatra"
require "json"    

class Foo
  attr_reader :id, :name

  def initialize(id, name)
    @id = id
    @name = name
  end
end

get '/start' do
  content_type :json
  Foo.new(2, "john").to_json
end

我从输出中获得的是默认为to_s的对象。

"#<Foo:0x007fe372a3ba80>"

2 个答案:

答案 0 :(得分:4)

您需要在班级上指定to_json方法。

class Foo
  attr_reader :id, :name

  def initialize(id, name)
    @id = id
    @name = name
  end

  def to_json 
    {:id => @id, :name => @name}.to_json
  end
end

答案 1 :(得分:0)

看起来您需要to_hash方法

class Foo
  def to_hash
    {:id => @id, :name => @name}
  end
end

否则Foo不是json可识别的类型。