2012-01-12 14 views
122

Mam duży skrót z zagnieżdżonymi tablicami i hashe. Chciałbym go po prostu wydrukować, aby był "czytelny" dla użytkownika.Najlepszy sposób na ładne drukowanie skrótu

Chciałbym, żeby to było coś w stylu to_yaml - to całkiem czytelne - ale wciąż zbyt wyglądające technicznie.

Docelowo będą to użytkownicy końcowi, którzy będą musieli odczytać te fragmenty danych, więc muszą być sformatowane w sposób czysty.

Wszelkie sugestie?

+0

możliwe duplikat [Ruby: Jak zrobić IRB strukturę wydruku tablice i mieszań] (http://stackoverflow.com/questions/703049/ruby-how-to-make-irb-print -structure-for-tablice-i-hashe) –

+0

narzędzie online http://jsonviewer.stack.hu. Jednak nie działa poprawnie w przypadku składni rakiet hash. –

Odpowiedz

193
require 'pp' 
pp my_hash 

Zastosowanie pp jeśli trzeba wbudowany rozwiązanie i po prostu rozsądne podziały wiersza.

Użyj awesome_print, jeśli możesz zainstalować klejnot. (W zależności od swoich użytkowników, możesz użyć opcji index:false aby wyłączyć wyświetlanie indeksu tablicy.)

+75

Uwaga dla Roobys (Ruby noobs) jak ja : musisz "wymagać" pp'', aby wywołać metodę "pp". –

-3

Pod szyną, tablice i hasze w Ruby mają wbudowane funkcje to_json. Chciałbym używać JSON tylko dlatego, że jest bardzo czytelny w przeglądarce internetowej, np. Google Chrome.

To powiedziawszy, jeśli obawiasz się, że wygląda zbyt "tech looking" powinieneś prawdopodobnie napisać własną funkcję, która zastępuje nawiasy klamrowe i nawiasy kwadratowe w twoich skrótach i tablicach z białymi znakami i innymi znakami.

Sprawdź funkcję programu gsub, aby uzyskać bardzo dobry sposób na zrobienie tego. Graj dalej z różnymi postaciami i różnymi ilościami białych znaków, aż znajdziesz coś, co wygląda atrakcyjnie. http://ruby-doc.org/core-1.9.3/String.html#method-i-gsub

+7

Arrays i hashe nie mają wbudowanej metody to_json, są one dodawane przez ActiveSupport z Rails. –

+0

Jest jeszcze gorszy niż normalnie irb/pry: '{" programming_language ": {" ruby ​​": {}," python ": {}}}' –

+0

OP nie wyklucza Railsów –

58

Jeśli masz JSON, polecam JSON.pretty_generate(hash) ponieważ jest to prostsze niż awesome_print, świetnie wygląda w pre tagu i pozwala do łatwego kopiowania ze strony internetowej. (Zobacz także: How can I "pretty" format my JSON output in Ruby on Rails?)

+0

Ta odpowiedź skorzystałaby z rzeczywistego przykładu. –

+0

@TravisBear Istnieje przykładowe wyjście, jeśli klikniesz link "zobacz również" w mojej odpowiedzi. Polecam tę odpowiedź w szczególności: http://stackoverflow.com/a/1823885/109618 –

+3

Byłoby 'puts JSON.pretty_generate (hash)' – joeloui

4

Użyj powyższych odpowiedzi, jeśli drukujesz użytkownikom.

Jeśli chcesz wydrukować tylko dla siebie w konsoli, proponuję użyć klejnotu do wybijania zamiast irb. Oprócz drukowania ładna, pry ma wiele innych funkcji, jak również (sprawdź railscast poniżej)

gem install pry

I sprawdzić to railscast:

http://railscasts.com/episodes/280-pry-with-rails

1

Korzystanie Pry cię wystarczy dodać następujący kod do swojego ~ /.pryrc:

require "awesome_print" 
AwesomePrint.pry! 
16

Innym rozwiązaniem, które działa dla mnie lepiej niż pp lub awesome_print:

require 'pry' # must install the gem... but you ALWAYS want pry installed anyways 
Pry::ColorPrinter.pp(obj) 
+2

Należy zauważyć, że 'Pry :: ColorPrinter.pp (obj)' zapisuje do standardowego wyjścia, ale może przyjmować dodatkowe parametry, w tym miejsce docelowe. Podobnie jak 'Pry :: ColorPrinter.pp (obj, a_logger)' –

1

Spośród wszystkich klejnotów próbowałem, show_data gem pracował najlepszy dla mnie, ja teraz używać go obszernie zalogować params hash w Rails prawie cały czas

11

Jeśli nie ma żadnego wymyślnego działania klejnot, ale mam JSON, ta linia CLI będzie działać na hash:

puts JSON.pretty_generate(my_hash).gsub(":", " =>")

#=> 
{ 
    :key1 => "value1", 

    :key2 => "value2", 

    :key3 => "value3" 
} 
+5

Dochodzi do upuszczenia, ponieważ spowoduje to zepsucie klawiszy i wartości zawierających ":" – thomax

+0

Nie dotyczy to również wartości zerowej (JSON) w porównaniu z zerą (Ruby). – Rennex

Powiązane problemy