2013-01-31 12 views
6

Ich habe ein Problem in Sinatra, wo ich nicht mit nur einem JSON antworten kann und ich kann nicht finden, gute Sinatra Docs überall, die meisten Dinge scheint veraltet.Sinatra JSON-Rendering funktioniert nicht wie erwartet

Anyways, hier ist der Code:

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 

Die Antwort, die ich tun ist:

"<!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" 

Wo es nur die json Teil sein sollte. Warum gibt es HTML-Tags, wenn ich nicht danach gefragt habe?

+0

hast du einige Layout konfiguriert ? – three

+0

@thiagofm - hast du eine Antwort darauf gefunden? – iain

+0

@iain noch nicht ... – thiagofm

Antwort

6

Sie this blog post gesehen?

require 'json' 

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

Ich würde auch dies ändern:

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

HTML/XML-Anrufe stoppen Sie die Route. Da Sie die sinatra-contrib gem verwenden, und da Rubin diese Pars alle etc nicht benötigen, können Sie auch den Code vereinfachen Sie als Beispiel gegeben haben:

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 
+0

immer noch erhalten \ n

{\ "Hallo \": \ "Welt \"}

\ n – thiagofm

+0

@thiagofm Was verwenden Sie, um die Anfrage zu stellen? RSpec? cURL? Chrom…? – iain

+0

Ich benutze Capybara. – thiagofm

1

Try

content_type :json 

vor dem json(...) Aufruf setzen

+0

immer noch nicht funktioniert. – thiagofm

Verwandte Themen