Sinatra json呈现不按预期工作

thi*_*ofm 6 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
Run Code Online (Sandbox Code Playgroud)

我得到的回应是:

"<!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"
Run Code Online (Sandbox Code Playgroud)

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

iai*_*ain 6

你看过这篇博文吗?

require 'json'

get '/example.json' do
  content_type :json
  { :key1 => 'value1', :key2 => 'value2' }.to_json
end
Run Code Online (Sandbox Code Playgroud)

我也会修改为:

get '/example.json', :provides => :json do
Run Code Online (Sandbox Code Playgroud)

使用该路由停止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
Run Code Online (Sandbox Code Playgroud)