2013-06-25 25 views
9

mam coś takiego:Jak ładnie wydrukować skrót do widoku Railsy?

{"a":"1","b":"2","c":"3","asefw":"dfsef"} 

chcę wydrukować go w widoku. Jaki jest najlepszy sposób na zrobienie tego?

Próbowałem parsować go jako obiekt JSON i przy użyciu JSON.stringify, ale wydaje się, że bałagan wcięcia.

Każda rada? Nie mam nic przeciwko rozwiązaniu JavaScript.

+2

mieć ciąg znaków lub czy to obiekt Hash? – Dogbert

+2

Sprawiasz, że domyślamy się, czego chcesz, co nie jest sprawiedliwe. Nie możemy zgadywać, ponieważ zawiesili nasze umiejętności czytania umysłu. Czy możemy kupić wskazówkę? –

+1

Wygląda na to, że i tak zgadłeś :) Odpowiedz loterii. – Casper

Odpowiedz

15

Jak o:

require 'json' 

hash = JSON['{"a":"1","b":"2","c":"3","asefw":"dfsef"}'] 
puts JSON.pretty_generate(hash) 

które wyjścia:

{ 
    "a": "1", 
    "b": "2", 
    "c": "3", 
    "asefw": "dfsef" 
} 

JSON.pretty_generate jest raczej narzędziem do debugowania niż coś bym polegać, kiedy faktycznie generowania JSON być wysłane do przeglądarki. "Ładny" aspekt oznacza także "nadęty" i "wolniejszy" ze względu na dodany odstęp, ale jest dobry do diagnozowania i zrozumienia tego, co jest w strukturze, więc może dobrze działać dla twoich potrzeb.

Jedną z rzeczy, o której należy pamiętać, to że HTML, gdy renderowany jest przez przeglądarkę, zawiera białe znaki, więc białe znaki znikają. Aby tego uniknąć, należy zawinąć wyjście JSON w bloku <pre>, aby zachować białe znaki i linie podziału. Coś jak to powinno działać:

<pre> 
{ 
    "a": "1", 
    "b": "2", 
    "c": "3", 
    "asefw": "dfsef" 
} 
</pre> 
+0

Prawie działa, oto co dostaję: http://cl.ly/image/072q3O1B3T10 – chintanparikh

+0

Aha, i mój kod: https://gist.github.com/chintanparikh/5856307 – chintanparikh

+0

Nie zgadzam się, jeśli twój produkt to API, którego będą używać programiści, to czyszczenie JSON może być dla nich błogosławieństwem i kompresją gzip dodane białe spacje nie są dużym obciążeniem. Tak czy owak, byłoby miło mieć opcję ładnego drukowania lub nie w twoim API. –

2

Podana odpowiedź jest działa dobrze, ale jeśli chcesz mieć ładniejsze i bardziej zwyczaj dość hash, użyj awesome_print

require 'awesome_print' 
hash = JSON['{"a":"1","b":"2","c":"3","asefw":"dfsef"}'] 
ap hash 

Cheers!

+0

awesome_print ma niefortunną wadę wymuszania wyrównania skrótów, więc wartość => jest równa, która nie działa dobrze w przypadku zagnieżdżonych skrótów (zagnieżdżona wartość mieszania jest faktycznie wyświetlana w LEWEJ wartości nadrzędnego skrótu). – jpwynn

3
<%= raw JSON.pretty_generate(hash).gsub(" ","&nbsp;") %> 
2

Jeśli (jak ja) uważają, że opcja pretty_generate wbudowane JSON biblioteki Ruby nie jest „dość” na tyle, polecam moje własne NeatJSON gem dla formatowania.

Aby użyć go, należy użyć JSON.neat_generate zamiast JSON.pretty_generate.

Podobnie jak Ruby's pp, zachowa obiekty i tablice na jednej linii, kiedy się zmieści, ale w razie potrzeby zawinie do wielu. Na przykład:

{ 
    "navigation.createroute.poi":[ 
    {"text":"Lay in a course to the Hilton","params":{"poi":"Hilton"}}, 
    {"text":"Take me to the airport","params":{"poi":"airport"}}, 
    {"text":"Let's go to IHOP","params":{"poi":"IHOP"}}, 
    {"text":"Show me how to get to The Med","params":{"poi":"The Med"}}, 
    {"text":"Create a route to Arby's","params":{"poi":"Arby's"}}, 
    { 
     "text":"Go to the Hilton by the Airport", 
     "params":{"poi":"Hilton","location":"Airport"} 
    }, 
    { 
     "text":"Take me to the Fry's in Fresno", 
     "params":{"poi":"Fry's","location":"Fresno"} 
    } 
    ], 
    "navigation.eta":[ 
    {"text":"When will we get there?"}, 
    {"text":"When will I arrive?"}, 
    {"text":"What time will I get to the destination?"}, 
    {"text":"What time will I reach the destination?"}, 
    {"text":"What time will it be when I arrive?"} 
    ] 
} 

obsługuje również różnorodne formatting options dodatkowo dostosować swoją produkcję. Na przykład ile spacji przed/po dwukropkach? Przed/po przecinkach? W nawiasach tablic i przedmiotów? Czy chcesz posortować klucze swojego obiektu? Czy chcesz, aby wszystkie dwukropki były ustawione w jednej linii?

Na przykład, przy użyciu przykładowego Hash, można uzyskać te różne wyjścia, w zależności od tego, co chcesz:

// JSON.neat_generate(o, wrap:true) 
{ 
    "a":"1", 
    "b":"2", 
    "c":"3", 
    "asefw":"dfsef" 
} 

// JSON.neat_generate o, wrap:true, aligned:true 
{ 
    "a" :"1", 
    "b" :"2", 
    "c" :"3", 
    "asefw":"dfsef" 
} 

// JSON.neat_generate o, wrap:true, aligned:true, around_colon:1 
{ 
    "a"  : "1", 
    "b"  : "2", 
    "c"  : "3", 
    "asefw" : "dfsef" 
} 
2

IRB (główny)> umieszcza queried_object.pretty_inspect

0

Można spróbować gem awesome_print działa bardzo dobrze, a w widoku zapisu

<%= ap(your_hash, plain: true, indent: 0).html_safe %> 

również można zmienić wartości dla config style hash Zobacz

Powiązane problemy