2013-01-31 14 views
6

Sto avendo un problema in Sinatra dove non posso rispondere con solo un json e non riesco a trovare buoni documenti sinatra ovunque, la maggior parte delle cose sembra obsoleto.Sinatra json rendering non funziona come previsto

In ogni modo, ecco il codice:

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 

La risposta che io capisco è:

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

Dove avrebbe dovuto essere solo la parte JSON. Perché sta rendendo i tag html quando non l'ho richiesto?

+0

hai qualche schema configurato ? – three

+0

@thiagofm - hai trovato una risposta a questo? – iain

+0

@iain non ancora ... – thiagofm

risposta

6

Hai visto this blog post?

require 'json' 

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

vorrei anche modificare questo a:

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

per fermare le chiamate HTML/XML utilizzando il percorso. Dal momento che si sta utilizzando la gemma Sinatra-contrib, e dal momento che Ruby non hanno bisogno di tutte quelle parentesi, ecc, si può anche semplificare il codice che hai dato come esempio per:

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

ottiene ancora \ n

{\ "ciao \": \ "mondo \"}

\ n – thiagofm

+0

@thiagofm Che cosa stai usando per fare la richiesta? RSpec? arricciare? Cromo…? – iain

+0

Sto usando capibara. – thiagofm

1

provare a mettere

content_type :json 

prima della chiamata json(...)

+0

ancora non funziona. – thiagofm

Problemi correlati