Ich möchte, dass meine JSON-Ausgabe in Ruby on Rails "hübsch" oder schön formatiert ist.
Im Moment rufe ich an to_json
und mein JSON ist alles in einer Leitung. Manchmal kann es schwierig sein, festzustellen, ob im JSON-Ausgabestream ein Problem vorliegt.
Gibt es eine Möglichkeit, mein JSON so zu konfigurieren, dass es in Rails "hübsch" oder schön formatiert ist?
ruby-on-rails
ruby
json
pretty-print
JP Richardson
quelle
quelle
y my_json
wird gut formatieren Sachen, wenn Sie eine schnelle Lösung wollen.undefined method 'y' for main:Object
y
ist in der Schienenkonsole erhältlich.Antworten:
Verwenden Sie die
pretty_generate()
in späteren Versionen von JSON integrierte Funktion. Zum Beispiel:Was bringt dich:
quelle
format.json { render :json => @whatever }
format.json { render :json => JSON.pretty_generate(my_json) }
.Dank Rack Middleware und Rails 3 können Sie für jede Anforderung hübsches JSON ausgeben, ohne den Controller Ihrer App zu ändern. Ich habe ein solches Middleware-Snippet geschrieben und bekomme JSON in Browser und
curl
Ausgabe schön gedruckt .Der obige Code sollte in
app/middleware/pretty_json_response.rb
Ihr Rails-Projekt eingefügt werden. Und der letzte Schritt ist die Registrierung der Middleware inconfig/environments/development.rb
:Ich empfehle nicht, es in zu verwenden
production.rb
. Das JSON-Reparsing kann die Antwortzeit und den Durchsatz Ihrer Produktions-App beeinträchtigen. Möglicherweise wird eine zusätzliche Logik wie der Header 'X-Pretty-Json: true' eingeführt, um die Formatierung für manuelle Curl-Anforderungen bei Bedarf auszulösen.(Getestet mit Rails 3.2.8-5.0.0, Ruby 1.9.3-2.2.0, Linux)
quelle
obj = JSON.parse(response.body.first)
, damit es funktioniert.Rack::Utils.bytesize(pretty_str).to_s
zupretty_str.bytesize.to_s
und es funktioniert super!Das
<pre>
mit verwendete HTML-TagJSON.pretty_generate
macht den JSON aus Ihrer Sicht hübsch. Ich war so glücklich, als mein berühmter Chef mir Folgendes zeigte:quelle
Wenn du möchtest:
Dann ... ersetzen Sie den ActionController :: Renderer für JSON! Fügen Sie Ihrem ApplicationController einfach den folgenden Code hinzu:
quelle
json.respond_to?(:to_h)
oder:to_hash
. (2) Pretty_generate kann an Dingen ersticken, die to_json nicht tut.Schauen Sie sich Awesome Print an . Analysieren Sie die JSON-Zeichenfolge in einen Ruby-Hash und zeigen Sie sie dann folgendermaßen an
ap
:Mit den oben genannten sehen Sie:
Mit Awesome Print wird auch eine Farbe hinzugefügt, die Stack Overflow nicht anzeigt.
quelle
Dumping eines ActiveRecord-Objekts an JSON (in der Rails-Konsole):
quelle
pp
Verwenden Sie , um eine Zeichenfolge zu erhalten, anstatt auf die Standardausgabe zu druckenUser.first.as_json.pretty_inspect
. Funktioniert gut für mich.Verwenden von
<pre>
HTML-Code undpretty_generate
ist ein guter Trick:quelle
Wenn Sie feststellen, dass die
pretty_generate
in Rubys JSON-Bibliothek integrierte Option nicht "hübsch" genug ist, empfehle ich mein eigenes NeatJSON- Juwel für Ihre Formatierung.Um es zu benutzen:
und dann verwenden
anstatt
Wie bei Ruby
pp
werden Objekte und Arrays in einer Zeile gehalten, wenn sie passen, aber bei Bedarf in mehrere Zeilen umbrochen. Zum Beispiel:Es unterstützt auch eine Vielzahl von Formatierungsoptionen , um Ihre Ausgabe weiter anzupassen. Wie viele Leerzeichen vor / nach Doppelpunkten? Vor / nach Kommas? In den Klammern von Arrays und Objekten? Möchten Sie die Schlüssel Ihres Objekts sortieren? Möchten Sie, dass alle Doppelpunkte in einer Reihe stehen?
quelle
Hier ist eine Middleware-Lösung, die von dieser hervorragenden Antwort von @gertas modifiziert wurde . Diese Lösung ist nicht Rails-spezifisch - sie sollte mit jeder Rack-Anwendung funktionieren.
Die hier verwendete Middleware-Technik unter Verwendung von #each wird in ASCIIcasts 151: Rack Middleware von Eifion Bedford erläutert .
Dieser Code befindet sich in app / middleware / pretty_json_response.rb :
Fügen Sie dies zum Aktivieren zu config / environment / test.rb und config / environment / development.rb hinzu:
Vermeiden Sie die Verwendung in der Produktion, da @gertas in seiner Version dieser Lösung warnt. Es ist etwas langsam.
Mit Schienen getestet 4.1.6.
quelle
quelle
Hier ist meine Lösung, die ich während meiner eigenen Suche aus anderen Posts abgeleitet habe.
Auf diese Weise können Sie die pp- und jj-Ausgabe nach Bedarf an eine Datei senden.
quelle
Ich habe das Juwel CodeRay verwendet und es funktioniert ziemlich gut. Das Format enthält Farben und erkennt viele verschiedene Formate.
Ich habe es für ein Juwel verwendet, das zum Debuggen von Rails-APIs verwendet werden kann, und es funktioniert ziemlich gut.
Der Edelstein heißt übrigens 'api_explorer' ( http://www.github.com/toptierlabs/api_explorer )
quelle
Wenn Sie dies schnell in einer Rails-Controller-Aktion implementieren möchten, um eine JSON-Antwort zu senden:
quelle
Wenn Sie RABL verwenden , können Sie es wie hier beschrieben für die Verwendung von JSON.pretty_generate konfigurieren:
Ein Problem bei der Verwendung von JSON.pretty_generate besteht darin, dass JSON-Schemaüberprüfer mit Ihren datetime-Zeichenfolgen nicht mehr zufrieden sind. Sie können diese in Ihrer config / initializers / rabl_config.rb beheben mit:
quelle
quelle
Ich verwende Folgendes, da ich die Header, den Status und die JSON-Ausgabe als Satz nützlich finde. Die Anrufroutine wird auf Empfehlung einer Railscasts-Präsentation unter http://railscasts.com/episodes/151-rack-middleware?autoplay=true aufgeschlüsselt
quelle
Hübsche Druckvariante:
Ergebnis:
quelle
Das einfachste Beispiel, an das ich denken könnte:
Beispiel für eine Rails-Konsole:
quelle