У меня есть огромный 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')