Sinatra json呈现不按预期工作

时间:2013-01-31 21:57:27

标签: ruby sinatra

我在Sinatra遇到一个问题,我只能用json回复,而且我无法在任何地方找到好的sinatra文档,大多数事情似乎已经过时了。

无论如何,这是代码:

module MemcachedManager
  class App < Sinatra::Base
    register Sinatra::Contrib
    helpers Sinatra::JSON

    get '/' do
      json({ hello: 'world' })
    end
  end
end

MemcachedManager::App.run! if __FILE__ == $0

我得到的回应是:

"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><p>{\"hello\":\"world\"}</p></body></html>\n"

它应该只是json部分。当我没有要求时,为什么要渲染html标签?

2 个答案:

答案 0 :(得分:6)

你见过this blog post吗?

require 'json'

get '/example.json' do
  content_type :json
  { :key1 => 'value1', :key2 => 'value2' }.to_json
end

我也会将其修改为:

get '/example.json', :provides => :json do

使用路由停止HTML / XML调用。既然你正在使用sinatra-contrib gem,并且因为Ruby不需要所有那些parens等,你也可以简化你给出的代码作为例子:

require 'sinatra/json'

module MemcachedManager    
  class App < Sinatra::Base
    helpers Sinatra::JSON
    get '/', :provides => :json do
      json hello: 'world'
    end
  end
end

MemcachedManager::App.run! if __FILE__ == $0

答案 1 :(得分:1)

尝试放

content_type :json
json(...)电话

之前