2015-02-10 43 views
2

我解析文件input.json到哈希像這樣紅寶石解析JSON無需打印效果

input_object = JSON.parse(File.read('input.json')) 

當我運行該腳本,無論是在IRB或運行ruby script.rb,終端我運行它從開始打印目的。這通常不會成爲問題,但input.json是一個大文件,可能需要10〜20分鐘才能打印。有沒有一種方法可以靜靜地做到這一點?

更新:即使有irb_context.echo = false,它打印。這意味着設置input_object =對象未被打印。

+1

什麼你應該打印到標準輸出,除非你是在IRB。 – ptierno 2015-02-10 23:22:34

+0

我將它添加到'script.rb'中,並運行'ruby script.rb',並將它打印在終端中。我使用的是Ruby 2.1.2。 – 2015-02-10 23:26:07

+1

你可以測試它更小,絕對有效的json文件例如test.json { 「測試」:123 } ? – JariOtranen 2015-02-10 23:26:58

回答

2

紅寶石示出了結果,這就是爲什麼IRB被打印JSON。

有一個典型的Ruby IRB成語附加任何短期項目,如:

input_object = JSON.parse(File.read('input.json')); 0 

的附加0使得IRB打印0,而不是長期JSON。

您的腳本,它可能是打印JSON,因爲JSON解析器是打一個錯誤,你看到的是一個例外調試消息。

嘗試包裹解析:

begin 
    input_object = JSON.parse(File.read('input.json')) 
rescue 
    raise "JSON parse error!" 
end 

是否仍然打印JSON?

如果是這樣,嘗試使腳本可執行:

  1. 將腳本的第一行是:

    #!/usr/bin/env ruby 
    
  2. 製作的最後一行是:

    exit 0 
    
  3. 使其可執行:

    chmod u+x script.rb 
    
  4. 運行:

    ./script.rb 
    

是否仍然打印JSON?

+0

它甚至在irb外打印 – ptierno 2015-02-10 23:27:57