715 votes

Question : Comment puis-je formater « Pretty » ma sortie JSON avec Ruby on Rails ?

J’aimerais que ma sortie JSON avec Ruby on Rails à être « assez » ou bien en forme. À l’heure actuelle, j’appelle le `` méthode et mon JSON est tout sur une seule ligne. Parfois, cela peut être difficile de voir s’il y a un problème dans le flux de sortie JSON.

Y a-t-il moyen de configurer ou une méthode pour faire mon JSON « pretty » ou bien formaté dans RoR ?

1108voto

jpatokal Points 6061

Utilisation du `` fonction, intégrée dans les versions ultérieures de JSON. Par exemple :

Qui vous permet de vous :

96voto

Roger Garza Points 281

Le tag html, utilisé avec , rendra le JSON assez dans votre point de vue. J’étais tellement heureuse quand mon patron illustre m’a montré cela :

81voto

gertas Points 7113

Grâce à Middleware Rack et Rails 3, vous pouvez sortie assez JSON pour chaque demande, sans modification du contrôleur de votre application. J'ai écrit ces middleware extrait de code et j'obtiens bien imprimée JSON dans le navigateur et curl de la production.

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

Le code ci-dessus doit être placé dans app/middleware/pretty_json_response.rb de vos Rails de projet. Et la dernière étape consiste à enregistrer le middleware en config/environments/development.rb:

config.middleware.use PrettyJsonResponse

Je ne recommande pas de l'utiliser en production.rb. Le JSON ré-peut dégrader les temps de réponse et le débit de production de votre application. Finalement, la logique supplémentaire tels que "X-Jolie-Json: true' en-tête peut être introduit pour déclencher la mise en forme manuelle curl demande sur demande.

(Testé avec des Rails 3.2.8-4.0.2, Ruby 1.9.3-2.1.0, Linux)

25voto

Ed Lebert Points 106

Si vous le souhaitez :

  1. Enjoliver automatiquement toutes les réponses JSON sortants de votre application.
  2. Éviter la pollution objet #to_json / #as_json
  3. Éviter l’analyse/re-rendering JSON à l’aide de middleware (beurk !)
  4. Prenez le chemin de RAILS !

Alors... remplacer le ActionController::Renderer pour JSON ! Il suffit d’ajouter le code suivant à votre ApplicationController :

16voto

Thomas Klemm Points 4335

Dumping un objet JSON ActiveRecord (dans la console Rails) :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X