2013-02-26 13 views
6

Sto usando le viste .json.erb invece di chiamare il metodo to_json.Come ridurre l'output JSON in Rails?

Ho trovato diversi consigli relativi alla minificazione dell'uscita JSON. Quelli dicono di zippare tutto l'output dell'applicazione web, altri consigliano di usare after filter o before render ma non spiegano come ridurre gli spazi e le schede tra gli elementi JSON e dove prendere l'input JSON e dove mettere il risultato minisito. I terzi consigli dicono rigorosamente sulla minimizzazione di JavaScript.

risposta

4

Il modo più semplice è solo per ottenere da Ruby l'analisi dell'intera risposta e sputarla nuovamente utilizzando after_filter. Prova il seguente codice in app/controllers/application_controller.rb.

class ApplicationController < ActionController::Base 
    after_filter :minify_json 

    private 

    def minify_json 
    response.body = JSON.parse(response.body).to_json if request.format.json? 
    end 
end 

Se si decide che si desidera che il JSON abbellito invece di minified, è possibile utilizzare questo codice:

class ApplicationController < ActionController::Base 
    after_filter :beautify_json 

    private 

    def beautify_json 
    response.body = JSON.pretty_generate(JSON.parse(response.body)) if request.format.json? 
    end 
end 

Oppure, si potrebbe consentire al richiedente di specificare con un parametro:

class ApplicationController < ActionController::Base 
    after_filter :format_json 

    private 

    def format_json 
    if request.format.json? 
     json = JSON.parse(response.body) 
     response.body = params[:pretty] ? JSON.pretty_generate(json) : json.to_json 
    end 
    end 
end