0

我有一个巨大的 json 文件,其中包含来自数据库的 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')
4

1 回答 1

0

我建议查看json-streamergem 的示例

于 2019-04-20T19:54:42.913 回答