J'aimerais que ma sortie JSON dans Ruby on Rails soit "jolie" ou bien formatée.
En ce moment, j'appelle to_json
et mon JSON est sur une seule ligne. Il peut parfois être difficile de voir s'il y a un problème dans le flux de sortie JSON.
Existe-t-il un moyen de configurer pour rendre mon JSON "joli" ou bien formaté dans Rails?
ruby-on-rails
ruby
json
pretty-print
JP Richardson
la source
la source
y my_json
formatera bien les choses si vous voulez une solution rapide.undefined method 'y' for main:Object
y
est disponible en console rails.Réponses:
Utilisez la
pretty_generate()
fonction, intégrée dans les versions ultérieures de JSON. Par exemple:Ce qui vous donne:
la source
format.json { render :json => @whatever }
format.json { render :json => JSON.pretty_generate(my_json) }
.Grâce à Rack Middleware et Rails 3, vous pouvez générer un joli JSON pour chaque demande sans changer le contrôleur de votre application. J'ai écrit un tel extrait de middleware et j'obtiens un JSON bien imprimé dans le navigateur et la
curl
sortie.Le code ci-dessus doit être placé dans
app/middleware/pretty_json_response.rb
votre projet Rails. Et la dernière étape consiste à enregistrer le middleware dansconfig/environments/development.rb
:Je ne recommande pas de l'utiliser dans
production.rb
. La nouvelle analyse JSON peut dégrader le temps de réponse et le débit de votre application de production. Finalement, une logique supplémentaire telle que l'en-tête «X-Pretty-Json: true» peut être introduite pour déclencher le formatage des demandes de curl manuelles à la demande.(Testé avec Rails 3.2.8-5.0.0, Ruby 1.9.3-2.2.0, Linux)
la source
obj = JSON.parse(response.body.first)
pour la faire fonctionner.Rack::Utils.bytesize(pretty_str).to_s
pourpretty_str.bytesize.to_s
et il fonctionne très bien!La
<pre>
balise en HTML, utilisée avecJSON.pretty_generate
, rendra le JSON joli dans votre vue. J'étais tellement heureux quand mon illustre patron m'a montré ceci:la source
Si tu veux:
Alors ... remplacez ActionController :: Renderer for JSON! Ajoutez simplement le code suivant à votre ApplicationController:
la source
json.respond_to?(:to_h)
ou:to_hash
. (2) pretty_generate peut s'étouffer avec des choses que to_json ne fait pas.Découvrez Impression impressionnante . Analyser la chaîne JSON dans un hachage Ruby, puis l'afficher avec
ap
comme ceci:Avec ce qui précède, vous verrez:
Awesome Print ajoutera également des couleurs que Stack Overflow ne vous montrera pas.
la source
Vidage d'un objet ActiveRecord vers JSON (dans la console Rails):
la source
pp
lieu d'imprimer sur une sortie standard, utilisezUser.first.as_json.pretty_inspect
. Fonctionne bien pour moi.Utiliser du
<pre>
code HTML etpretty_generate
c'est une bonne astuce:la source
Si vous trouvez que l'
pretty_generate
option intégrée à la bibliothèque JSON de Ruby n'est pas assez "jolie", je recommande mon propre bijou NeatJSON pour votre mise en forme.Pour l'utiliser:
puis utiliser
au lieu de
Comme Ruby,
pp
il gardera les objets et les tableaux sur une seule ligne lorsqu'ils s'adapteront, mais en enroulera en plusieurs si nécessaire. Par exemple:Il prend également en charge une variété d' options de formatage pour personnaliser davantage votre sortie. Par exemple, combien d'espaces avant / après deux-points? Avant / après des virgules? À l'intérieur des supports de tableaux et d'objets? Voulez-vous trier les clés de votre objet? Voulez-vous que les deux points soient alignés?
la source
Voici une solution middleware modifiée de cette excellente réponse de @gertas . Cette solution n'est pas spécifique à Rails - elle devrait fonctionner avec n'importe quelle application Rack.
La technique du middleware utilisée ici, en utilisant #each, est expliquée dans ASCIIcasts 151: Rack Middleware par Eifion Bedford.
Ce code va dans app / middleware / pretty_json_response.rb :
Pour l'activer, ajoutez-le à config / environnements / test.rb et config / environnements / development.rb:
Comme @gertas le prévient dans sa version de cette solution, évitez de l'utiliser en production. C'est un peu lent.
Testé avec Rails 4.1.6.
la source
la source
Voici ma solution que j'ai dérivée d'autres articles lors de ma propre recherche.
Cela vous permet d'envoyer la sortie pp et jj dans un fichier selon vos besoins.
la source
J'ai utilisé le joyau CodeRay et cela fonctionne plutôt bien. Le format comprend des couleurs et reconnaît de nombreux formats différents.
Je l'ai utilisé sur un joyau qui peut être utilisé pour le débogage des API de rails et cela fonctionne plutôt bien.
Soit dit en passant, la gemme est nommée 'api_explorer' ( http://www.github.com/toptierlabs/api_explorer )
la source
Si vous cherchez à implémenter rapidement ceci dans une action de contrôleur Rails pour envoyer une réponse JSON:
la source
Si vous utilisez RABL, vous pouvez le configurer comme décrit ici pour utiliser JSON.pretty_generate:
Un problème avec l'utilisation de JSON.pretty_generate est que les validateurs de schéma JSON ne seront plus satisfaits de vos chaînes datetime. Vous pouvez les corriger dans votre config / initializers / rabl_config.rb avec:
la source
la source
J'utilise ce qui suit car je trouve les en-têtes, l'état et la sortie JSON utiles en tant qu'ensemble. La routine d'appel est divisée sur recommandation d'une présentation de diffusion sur: http://railscasts.com/episodes/151-rack-middleware?autoplay=true
la source
Jolie variante d'impression:
Résultat:
la source
Exemple le plus simple, je pourrais penser à:
Exemple de console Rails:
la source