2010-04-02 4 views
18

मैं JSON.pretty_generate() प्राप्त करने के लिए वास्तव में रेल में सुंदर उत्पादन उत्पन्न करने के लिए नहीं कर पा रहे है।रूबी JSON.pretty_generate ... सुंदर unpretty

मैं रेल 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}" 

लेकिन, मैं वास्तव में क्या चाहता हूं रेल इसे उत्पन्न करने के लिए है। क्या किसी के पास कोई सुझाव है कि मैं रेलवे में जनरेटर को सही ढंग से काम करने के लिए क्यों नहीं मिल सकता?

धन्यवाद!

+0

@Amy, आपकी उदाहरण में कुछ विसंगतियां हो रहा है । '{" गाय "=> [1, 2, 3, 4], ...' वैध JSON मान्य नहीं है। जेएसओएन रूबी के '=>' के स्थान पर ':' का उपयोग करता है। क्या आप वास्तविक आउटपुट पेस्ट कर सकते हैं? –

+0

इसके बारे में क्षमा करें। मैं एक टर्मिनल से काटने और चिपक रहा था जहां मैंने आउटपुट को एक डाल() के माध्यम से रखा था। उपरोक्त स्क्रिप्ट/कंसोल और आईआरबी से सटीक आउटपुट है। – Amy

+0

क्या आप समझा सकते हैं कि आपको दूसरा आउटपुट कैसे मिलता है? (यानी लाइन JSON.pretty_generate (some_data) कहां है) – kikito

उत्तर

4

मैं रेल 2.3.8 का उपयोग और JSON मणि (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

@ एमी, इसका मतलब यह नहीं है कि यह उत्तर स्वीकार किया जाना चाहिए? – Konstantin

17

सुंदर JSON उत्पादन उत्पन्न करने के लिए ऐसा लगता है कि आप केवल एक puts कॉल छूट रहा है।

डेटा:

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

ओपी द्वारा प्रदान किए गए आउटपुट में कोई '\ n' नहीं है, इसलिए 'puts' कुछ भी बदलने वाला नहीं है। – Nowaker

+0

@DamianNowak मुझे यकीन नहीं है कि मैं समझता हूं कि आपकी आपत्ति क्या है। मेरे उदाहरण में मैं ओपी के रूप में एक ही इनपुट का उपयोग कर रहा हूं और फिर आईआरबी में 'puts' के उपयोग के माध्यम से सुंदर आउटपुट का प्रदर्शन कर रहा हूं। क्या आप कृपया स्पष्ट कर सकते हैं कि आपका क्या मतलब है? –

+3

'pretty_generate' ओपी के लिए काम नहीं करता है। ओपी के आउटपुट में कोई '\ n' या इंडेंट रिक्त स्थान नहीं हैं, जैसा कि आप देख सकते हैं। तो 'रखता है' कुछ भी बदलने वाला नहीं है। – Nowaker

संबंधित मुद्दे