2010-04-02 27 views
18

我似乎無法得到JSON.pretty_generate()實際上在Rails中生成漂亮的輸出。Ruby JSON.pretty_generate ...是非常有前景的

我使用Rails 2.3.5,它似乎自動加載JSON寶石。真棒。當使用script/console這確實產生JSON:

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}" 

但這不會產生漂亮輸出

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

我發現生成是用irb和的唯一途徑加載「純」版本:

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}" 

但是,我真正想要的是Rails產生這個。有沒有人有任何提示,爲什麼我不能讓Rails中的生成器正常工作?

謝謝!

+0

@Amy,似乎是在你的例子一些不一致的地方。 '{「cow」=> [1,2,3,4],...'不是有效的JSON。 JSON使用':'代替Ruby的'=>'。你能粘貼實際輸出嗎? – 2010-04-02 16:17:56

+0

對不起。我正在從終端輸入put()來剪貼。以上是腳本/控制檯和irb的確切輸出。 – Amy 2010-04-03 00:22:10

+0

你能解釋你如何得到第二個輸出嗎? (即JSON.pretty_generate(some_data)行) – kikito 2010-04-03 16:05:52

回答

4

我使用Rails 2.3.8並安裝了JSON gem(gem install json)。 JSON.pretty_generate現在確實很好腳本/控制檯:

>> 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

去圖。它現在有效。我最近也升級到了2.3.8。 – Amy 2010-07-10 05:19:55

+0

@艾米,這是不是說這個答案應該是接受的答案? – Konstantin 2015-09-29 15:10:46

17

要產生相當JSON輸出看來,你只是錯過了puts電話。

的數據:僅JSON.pretty_generate

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

呼喚:

> 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}" 

添加puts到組合:

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

OP提供的輸出不包含任何'\ n's,所以'puts'不會改變任何東西。 – Nowaker 2013-12-09 11:03:14

+0

@DamianNowak我不確定我是否理解你的反對意見。在我的例子中,我使用與指定的OP相同的輸入,然後通過在irb中使用'puts'來演示漂亮的輸出。你能否澄清你的意思? – 2013-12-10 01:04:37

+3

'pretty_generate'不適用於OP。正如你所看到的,在OP的輸出中沒有'\ n'或indent空格。所以'puts'不會改變任何事情。 – Nowaker 2013-12-10 11:08:42