web-dev-qa-db-ja.com

Railsビューにハッシュをプリティプリントするにはどうすればよいですか?

私は次のようなものを持っています:

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

ビューで印刷したいのですが。それを行うための最良の方法は何ですか?

JSONオブジェクトとして解析してJSON.stringifyを使用しようとしましたが、インデントが混乱しているようです。

何かアドバイス? JavaScriptソリューションは気にしません。

11
chintanparikh

どうですか:

require 'json'

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

どの出力:

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

JSON.pretty_generate は、ブラウザに送信するJSONを実際に生成するときに信頼するものというよりもデバッグツールです。 「きれいな」側面は、空白が追加されているため「肥大化」と「遅い」も意味しますが、構造内の内容を診断および理解するのに適しているため、ニーズに適している可能性があります。

覚えておくべきことの1つは、HTMLをブラウザーでレンダリングすると、空白が食いつぶされるため、空白の実行が消えることです。これを回避するには、JSON出力を<pre>ブロックでラップして、空白と改行を保持する必要があります。このようなものが機能するはずです:

<pre>
{
  "a": "1",
  "b": "2",
  "c": "3",
  "asefw": "dfsef"
}
</pre>
18
the Tin Man
<%= raw JSON.pretty_generate(hash).gsub(" ","&nbsp;") %>
3
Amol Pujari

(私のように)RubyのJSONライブラリに組み込まれているpretty_generateオプションが十分に「きれい」ではないことがわかった場合は、フォーマットに自分の NeatJSON gemをお勧めします。

これを使用するには、gem install neatjsonを使用してから、JSON.neat_generateの代わりにJSON.pretty_generateを使用します。

Rubyのppと同様に、オブジェクトと配列は、収まるときに1行に保持されますが、必要に応じて複数に折り返されます。例えば:

{
  "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?"}
  ]
}

また、出力をさらにカスタマイズするために、さまざまな フォーマットオプション もサポートしています。たとえば、コロンの前後にいくつのスペースがありますか?カンマの前後?配列とオブジェクトの括弧の内側?オブジェクトのキーを並べ替えますか?コロンをすべて並べますか?

たとえば、サンプルのハッシュを使用すると、必要なものに応じて、次のさまざまな出力を取得できます。

// 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"
}
3
Phrogz

irb(main)> puts queried_object.pretty_inspect

3
hophacker

あなたは宝石を試すことができます awesome_print 非常にうまく機能し、あなたの見解では

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

また、スタイルをハッシュビューに設定するための値を変更することもできます

2
Daniel Arenas

与えられた応答は正常に機能しますが、より美しく、よりカスタムのきれいなハッシュが必要な場合は、 awesome_print を使用してください。

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

乾杯!

2