Gracias a Rack Middleware y Rails 3 puedes producir un bonito JSON para cada petición sin cambiar ningún controlador de tu aplicación. He escrito este fragmento de middleware y consigo un JSON bien impreso en el navegador y curl
salida.
class PrettyJsonResponse
def initialize(app)
@app = app
end
def call(env)
status, headers, response = @app.call(env)
if headers["Content-Type"] =~ /^application\/json/
obj = JSON.parse(response.body)
pretty_str = JSON.pretty_unparse(obj)
response = [pretty_str]
headers["Content-Length"] = Rack::Utils.bytesize(pretty_str).to_s
end
[status, headers, response]
end
end
El código anterior debe colocarse en app/middleware/pretty_json_response.rb
de su proyecto de Rails. Y el paso final es registrar el middleware en config/environments/development.rb
:
config.middleware.use PrettyJsonResponse
No recomiendo usarlo en production.rb
. La reparación de JSON puede degradar el tiempo de respuesta y el rendimiento de su aplicación de producción. Eventualmente se puede introducir una lógica extra como el encabezado "X-Pretty-Json: true" para activar el formato de las solicitudes de rizos manuales a pedido.
(Probado con Rails 3.2.8-4.0.2, Ruby 1.9.3-2.1.0, Linux)