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

如何将所有Sinatra响应设置为JSON?,json,sinatra,Json,Sinatra,我已经能够在before块中将我的所有内容类型设置为JSON,但是是否有一个sinatra after过滤器允许我在所有响应上运行到\u JSON(而不是在下面的示例中将写入\u JSON3次) 谢谢 您可以在之后的块中执行此操作: before do content_type :json end get '/' do { a: 1 } end after do response.body = JSON.dump(response.body) end Sinatra将为更新的正

我已经能够在
before
块中将我的所有内容类型设置为JSON,但是是否有一个sinatra after过滤器允许我在所有响应上运行到\u JSON(而不是在下面的示例中将
写入\u JSON
3次)


谢谢

您可以在
之后的
块中执行此操作:

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

这个项目也做同样的事情。此外,您可能希望了解为构建API(如或)而设计的库。这两个库提供了一种连接解码器和编码器以处理此类自动转换的简单方法

Put
set:default\u content\u type'application/json'
并且您的所有响应都将包含
content type:application/json
标题

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

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