Yajl用数组数据流式传输巨大的json文件并对每个记录进行操作

时间:2019-04-20 14:14:15

标签: ruby yajl jsonstream

我有一个巨大的json文件,其中Array-data包含来自db的json记录。让我们在下面说

[
{"id":2,"name":"def","price":3.714714089426208},
{"id":3,"name":"ghi","price":27.0179624376119},
{"id":1,"name":"abc","price":52.51248221170203}
]

我想流式传输文件并一次处理一个记录。请告知如何完成。

我尝试了以下代码。但是它会打印整个数组,我担心的是内存使用情况,我想一次处理一个记录,因此无需将整个数组加载到内存中。

class JsonStreamer

  attr_accessor :parser

  def initialize()
    post_init
  end

  def post_init
    @parser = Yajl::Parser.new(:symbolize_keys => true)
    @parser.on_parse_complete = lambda {|obj|
      puts obj
      puts "-----------------------End of object --------------------------------"
    }
  end

  def receive_data(data)
    # continue passing chunks
    @parser << data
  end

  def parse(f)
    File.open(f, 'r') do |f|
      f.each(100) {|chunk| receive_data (chunk)}
    end

  end

end

js = JsonStreamer.new()
js.parse('sample.json')

1 个答案:

答案 0 :(得分:0)

我建议您检出json-streamer宝石的example