2

我正在使用 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>"
4

2 回答 2

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
于 2012-10-03T12:04:18.353 回答
0

看起来你需要一个to_hash方法

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

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

于 2012-10-03T12:06:58.417 回答