我正在使用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>"
答案 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可识别的类型。