Chciałbym, aby moje wyjście JSON w Ruby on Rails było „ładne” lub ładnie sformatowane.
W tej chwili dzwonię, to_json
a mój JSON jest na jednej linii. Czasami może być trudno stwierdzić, czy występuje problem w strumieniu wyjściowym JSON.
Czy istnieje sposób, aby skonfigurować JSON jako „ładny” lub ładnie sformatowany w Railsach?
ruby-on-rails
ruby
json
pretty-print
JP Richardson
źródło
źródło
y my_json
ładnie sformatuje rzeczy, jeśli chcesz szybkiej naprawy.undefined method 'y' for main:Object
y
jest dostępny w konsoli szyn.Odpowiedzi:
Użyj
pretty_generate()
funkcji wbudowanej w późniejszych wersjach JSON. Na przykład:Co daje ci:
źródło
format.json { render :json => @whatever }
format.json { render :json => JSON.pretty_generate(my_json) }
.Dzięki Rack Middleware i Rails 3 możesz wypisać ładny JSON dla każdego żądania bez zmiany kontrolera swojej aplikacji. Napisałem taki fragment oprogramowania pośredniego i ładnie wydrukowałem JSON w przeglądarce i
curl
wynikach.Powyższy kod należy umieścić w
app/middleware/pretty_json_response.rb
projekcie Rails. Ostatnim krokiem jest zarejestrowanie oprogramowania pośredniego wconfig/environments/development.rb
:Nie polecam go używać w
production.rb
. Ponowna analiza JSON może obniżyć czas odpowiedzi i przepustowość aplikacji produkcyjnej. W końcu może zostać wprowadzona dodatkowa logika, taka jak nagłówek „X-Pretty-Json: true”, aby wyzwalać formatowanie ręcznych żądań zwijania na żądanie.(Testowane z Railsami 3.2.8-5.0.0, Ruby 1.9.3-2.2.0, Linux)
źródło
obj = JSON.parse(response.body.first)
aby działała.Rack::Utils.bytesize(pretty_str).to_s
siępretty_str.bytesize.to_s
i działa świetnie!<pre>
Tag HTML, stosowaćJSON.pretty_generate
, będzie świadczyć JSON dość w widoku. Byłem bardzo szczęśliwy, kiedy mój znakomity szef pokazał mi to:źródło
Jeśli chcesz:
Następnie ... zamień ActionController :: Renderer dla JSON! Wystarczy dodać następujący kod do ApplicationController:
źródło
json.respond_to?(:to_h)
lub:to_hash
. (2) pretty_generate może zadławić się rzeczami, których nie robi to_json.Sprawdź Awesome Print . Parsuj ciąg JSON w Ruby Hash, a następnie wyświetl go w następujący
ap
sposób:Dzięki powyższym zobaczysz:
Niesamowity wydruk doda również trochę koloru, którego nie pokaże przepełnienie stosu.
źródło
Zrzucanie obiektu ActiveRecord do JSON (w konsoli Rails):
źródło
pp
zamiast drukowania na standardowe wyjście, użyjUser.first.as_json.pretty_inspect
. Działa dla mnie dobrze.Korzystanie z
<pre>
kodu HTML ipretty_generate
jest dobrą sztuczką:źródło
Jeśli okaże się, że
pretty_generate
opcja wbudowana w bibliotekę JSON Ruby nie jest wystarczająco „ładna”, polecam własny klejnot NeatJSON do formatowania.Aby go użyć:
a następnie użyj
zamiast
Podobnie jak Ruby,
pp
utrzyma obiekty i tablice w jednej linii, gdy się zmieszczą, ale w razie potrzeby zawinie do wielu. Na przykład:Obsługuje także różne opcje formatowania, aby dodatkowo dostosować wyniki. Na przykład, ile spacji przed / po dwukropkach? Przed / po przecinkach? W nawiasach tablic i obiektów? Czy chcesz posortować klucze swojego obiektu? Czy chcesz, aby wszystkie dwukropki były ustawione w jednej linii?
źródło
Oto rozwiązanie oprogramowania pośredniego zmodyfikowane z tej doskonałej odpowiedzi przez @gertas . To rozwiązanie nie jest specyficzne dla Railsów - powinno działać z dowolną aplikacją Rack.
Technika oprogramowania pośredniego zastosowana tutaj, przy użyciu #each, została wyjaśniona w ASCIIcasts 151: Rack Middleware autorstwa Eifion Bedford.
Ten kod znajduje się w app / middleware / pretty_json_response.rb :
Aby go włączyć, dodaj to do config / environment / test.rb i config / environment / development.rb:
Ponieważ @gertas ostrzega w swojej wersji tego rozwiązania, unikaj używania go w środowisku produkcyjnym. Jest trochę powolny.
Testowane z Rails 4.1.6.
źródło
źródło
Oto moje rozwiązanie, które zaczerpnąłem z innych postów podczas mojego wyszukiwania.
Pozwala to na przesłanie danych wyjściowych pp i jj do pliku w razie potrzeby.
źródło
Użyłem klejnotu CodeRay i działa całkiem dobrze. Format zawiera kolory i rozpoznaje wiele różnych formatów.
Użyłem go jako klejnotu, którego można używać do debugowania interfejsów API szyn i działa całkiem dobrze.
Nawiasem mówiąc, klejnot nazywa się „api_explorer” ( http://www.github.com/toptierlabs/api_explorer )
źródło
Jeśli chcesz szybko zaimplementować to w akcji kontrolera Rails, aby wysłać odpowiedź JSON:
źródło
Jeśli używasz RABL , możesz go skonfigurować zgodnie z opisem tutaj, aby użyć JSON.pretty_generate:
Problem z używaniem JSON.pretty_generate polega na tym, że walidatory schematu JSON nie będą już zadowolone z ciągów daty i godziny. Możesz to naprawić w pliku config / initializers / rabl_config.rb za pomocą:
źródło
źródło
Korzystam z następujących, ponieważ uważam, że nagłówki, status i dane wyjściowe JSON są przydatne jako zestaw. Procedura połączeń została opracowana na zalecenie z prezentacji w formie railscastów pod adresem : http://railscasts.com/episodes/151-rack-middleware?autoplay=true
źródło
Ładny wariant wydruku:
Wynik:
źródło
Najprostszy przykład, mógłbym wymyślić:
Przykład konsoli Rails:
źródło