我有一个巨大的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')