2010-04-02 3 views
18

난 레일에서 꽤 출력을 생성하는 JSON.pretty_generate() 실제로 얻을 수없는 것.루비 JSON.pretty_generate ... 꽤 unpretty입니다

레일 2.3.5를 사용하고 있으며 자동으로 JSON gem을로드하는 것으로 보입니다. 굉장해. 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}" 

그러나 제가 정말로 원했던 것은 레일즈가 이것을 만들어내는 것입니다. 누구든지 레일즈의 제너레이터를 제대로 작동시키지 못하는 이유를 알고 있습니까?

감사합니다.

+0

@Amy, 당신의 예에서 일부 불일치있을 것 같습니다 . '{ "cow"=> [1, 2, 3, 4], ... '는 유효한 JSON이 아닙니다. JSON은 Ruby의'=>'대신':'을 사용합니다. 실제 출력을 붙여 넣을 수 있습니까? –

+0

죄송합니다. puts()를 통해 출력을 넣은 터미널에서 잘라 붙이기를했습니다. 위의 내용은 script/console 및 irb의 정확한 출력입니다. – Amy

+0

두 번째 출력을 얻는 방법을 설명해 주시겠습니까? (즉, JSON.pretty_generate (some_data) 줄은 어디에 있습니까?) – kikito

답변

4

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

+0

@Amy,이 대답이 받아 들여지는 것이 아님을 의미하지 않습니까? – Konstantin

17

은 당신이 단지 puts 전화를 놓치고있는 것으로 보인다 꽤 JSON 출력을 생성합니다.

데이터 :

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

JSON.pretty_generate 호출 :

> 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'이 없으므로'puts'는 아무 것도 변경하지 않습니다. – Nowaker

+0

@DamianNowak 귀하의 이의 제기가 어떤 것인지 이해하는지 확신 할 수 없습니다. 필자는 필자가 예로 든 OP와 동일한 입력을 사용하고 있고 irb에서'puts '를 사용하여 꽤 출력을 보여주고있다. 무슨 뜻인지 분명히 설명해 주시겠습니까? –

+3

OP에'pretty_generate'가 작동하지 않습니다. 보시다시피 OP의 출력에는'\ n'이나 들여 쓰기 공백이 없습니다. 따라서'puts'는 아무것도 바꿀 수 없습니다. – Nowaker