【问题标题】:Ruby parse JSON without printing resultsRuby 解析 JSON 而不打印结果
【发布时间】:2015-02-10 23:18:45
【问题描述】:

我正在将文件 input.json 解析为这样的哈希

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

当我在 irb 或运行ruby script.rb 中运行脚本时,我运行它的终端开始打印对象。这通常不会有问题,但input.json 是一个大文件,打印可能需要 10 到 20 分钟。有什么方法可以让我默默地做到这一点吗?

更新:即使使用irb_context.echo = false,它也会打印。这意味着设置input_object = 对象不会被打印。

【问题讨论】:

  • 除非您在 irb 中,否则您那里的任何内容都不应打印到标准输出。
  • 我将它添加到script.rb,然后运行ruby script.rb,它在终端中打印出来。我正在使用 ruby​​ 2.1.2。
  • 你能测试它更小,绝对有效的 json 文件,例如test.json { "test": 123 } ?
  • 谢谢@JariOtranen!我想就是这样。用json.org/example测试,脚本静默运行。

标签: ruby json parsing


【解决方案1】:

Ruby 显示结果,这就是 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 吗?

【讨论】:

  • 显然它甚至在 irb 之外打印
猜你喜欢
  • 2011-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多