你如何将所有Sinatra响应设置为JSON?

时间:2014-12-25 03:33:01

标签: json sinatra

我已经能够将所有内容类型设置为before块中的JSON,但是在过滤器后面有一个sinatra允许我在所有响应上运行to_json(而不是写{ {1}}我的例子中有3次)?

to_json

谢谢!

2 个答案:

答案 0 :(得分:8)

您可以在after块中执行此操作:

before do
  content_type :json
end

get '/' do
  { a: 1 }
end

after do
  response.body = JSON.dump(response.body)
end

Sinatra将重新计算更新的正文值的正确内容长度。

另一种方法是使用助手:

helper do
  def j(data)
    JSON.dump(data)
  end
end

get '/' do
  j({ a: 1 })
end

Sinatra::JSON项目做同样的事情。此外,您可能希望查看专为构建API GrapeGoliath而设计的库。这两个库提供了一种简单的方法来连接解码器和编码器来处理这种类型的自动转换。

答案 1 :(得分:0)

输入 set :default_content_type, 'application/json',您的所有回复都将包含一个 Content-Type: application/json 标头。