У меня есть большой файл (> 50 МБ), который содержит хэш JSON. Что-то типа:
{
"obj1": {
"key1": "val1",
"key2": "val2"
},
"obj2": {
"key1": "val1",
"key2": "val2"
}
...
}
Вместо того, чтобы анализировать весь файл и брать, скажем, первые десять элементов, я хотел бы проанализировать каждый элемент в хэше. Меня на самом деле не волнует ключ, то есть obj1
.
Если я преобразую приведенное выше в это:
{
"key1": "val1",
"key2": "val2"
}
"obj2": {
"key1": "val1",
"key2": "val2"
}
Я могу легко добиться того, чего хочу, используя потоковую передачу Yajl:
io = File.open(path_to_file)
count = 10
Yajl::Parser.parse(io) do |obj|
puts "Parsed: #{obj}"
count -= 1
break if count == 0
end
io.close
Есть ли способ сделать это без изменения файла? Может быть, какой-то обратный вызов в Yajl?
obj
в вашем блоке не будет доступен, пока файл не будет прочитан полностью. Возможно, разработчики драгоценного камня Ruby смогут пролить на это больше света? - person the Tin Man   schedule 07.01.2014