对象上的 Ruby to_json 输出实例变量

Rob*_*345 2 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
Run Code Online (Sandbox Code Playgroud)

我从输出中得到的只是对象默认的 to_s。

"#<Foo:0x007fe372a3ba80>"
Run Code Online (Sandbox Code Playgroud)

Gaz*_*ler 5

您需要在您的类上指定一个 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
Run Code Online (Sandbox Code Playgroud)