2010-04-02 18 views
18

Aslında Rails'de güzel çıktı elde etmek için JSON.pretty_generate() elde edemiyorum.Ruby JSON.pretty_generate ... Oldukça garip bir şekilde

Rails 2.3.5 kullanıyorum ve JSON gem'i otomatik olarak yükler gibi görünüyor. Muhteşem. script/console kullanırken bu gerçekten JSON üretir:

some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}} 
some_data.to_json 
=> "{\"cow\":[1,2,3,4],\"moo\":{\"cat\":\"meow\",\"dog\":\"woof\"},\"foo\":1,\"bar\":20}" 

Ama bu oldukça çıkışı üretmez:

JSON.pretty_generate(some_data) 
=> "{\"cow\":[1,2,3,4],\"moo\":{\"cat\":\"meow\",\"dog\":\"woof\"},\"foo\":1,\"bar\":20}" 

Ben irb ve kullanmaktır üretmek için bulduk tek yolu "Saf" sürümünü yükleyin:

require 'rubygems' 
require 'json/pure' 
some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}} 
JSON.pretty_generate(some_data) 
=> "{\n \"cow\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"moo\": {\n \"cat\": \"meow\",\n \"dog\": \"woof\"\n },\n \"foo\": 1,\n \"bar\": 20\n}" 

ANCAK, gerçekten istediğim şey bunu üretmek için raylar. Rayların doğru çalışabilmesi için jeneratöre neden ulaşamadığım konusunda herhangi bir ipucu var mı?

Teşekkürler!

+0

@Amy, sizin örneklerde bazı tutarsızlıklar var gibi görünüyor . '{" inek "=> [1, 2, 3, 4], ...' geçerli bir JSON değil. JSON, Ruby's '=>' yerine ':' kullanır. Gerçek çıktıyı yapıştırabilir misin? –

+0

Bunun için üzgünüz. Çıkışı bir koz() ile koyduğum bir terminalden kesiyordum ve yapıştırıyordum. Yukarıdaki komut/konsol ve irb’den gelen çıktıdır. – Amy

+0

İkinci çıkışı nasıl aldığınızı açıklar mısınız? (ör. JSON.pretty_generate (some_data) satırı nerede? – kikito

cevap

4

Rails 2.3.8 kullanıyorum ve JSON gemini (gem install json) yükledim. JSON.pretty_generate şimdi komut/konsolda güzel yapar:

>> some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}} 
=> {"cow"=>[1, 2, 3, 4], "moo"=>{"cat"=>"meow", "dog"=>"woof"}, "foo"=>1, "bar"=>20} 
>> JSON.pretty_generate(some_data) 
=> "{\n \"cow\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"moo\": {\n \"cat\": \"meow\",\n \"dog\": \"woof\"\n },\n \"foo\": 1,\n \"bar\": 20\n}" 
+0

Git şekil. Şuan çalışıyor. Ayrıca yakın zamanda 2.3.8'e yükselttim. – Amy

+0

@Amy, bu cevabın kabul edilen kişi olması gerektiği anlamına gelmiyor mu? – Konstantin

17

o sadece bir puts çağrısı eksik olduğunu göründüğü oldukça JSON çıktısını oluşturmak için.

veriler:

some_data = {'foo' => 1, 'bar' => 20, 'cow' => [1, 2, 3, 4], 'moo' => {'dog' => 'woof', 'cat' => 'meow'}} 

sadece JSON.pretty_generate çağrılması:

> JSON.pretty_generate some_data 
=> "{\n \"foo\": 1,\n \"bar\": 20,\n \"cow\": [\n 1,\n 2,\n 3,\n 4\n ],\n \"moo\": {\n \"dog\": \"woof\",\n \"cat\": \"meow\"\n }\n}" 

karışımı içine puts ekleme:

> puts JSON.pretty_generate some_data 
{ 
    "foo": 1, 
    "bar": 20, 
    "cow": [ 
    1, 
    2, 
    3, 
    4 
    ], 
    "moo": { 
    "dog": "woof", 
    "cat": "meow" 
    } 
} 
+3

Sağlanan OP çıktı hiçbir '\ n' içermiyor, bu nedenle 'koyar' hiçbir şeyi değiştirmeyecek. – Nowaker

+0

@DamianNowak İtirazınızın ne olduğunu anladığımdan emin değilim. Örneğimde, belirtilen OP ile aynı girişi kullanıyorum ve daha sonra irb içinde 'puts' kullanımıyla güzel çıktıyı gösteriyorum. Ne demek istediğini açıklayabilir misiniz? –

+3

'pretty_generate' OP için çalışmıyor. Gördüğünüz gibi, OP'nin çıktısında '\ n' veya girinti boşlukları yoktur. Yani 'koyar' hiçbir şeyi değiştirmeyecek. – Nowaker

İlgili konular