Мне нужно иметь возможность обрабатывать большие файлы JSON, создавая экземпляры объектов из десериализуемых подстрок по мере того, как мы итерируем/переносим в файл.
Например:
Скажем, я могу десериализовать только в экземпляры следующего:
case class Data(val a: Int, val b: Int, val c: Int)
и ожидаемый формат JSON:
{ "foo": [ {"a": 0, "b": 0, "c": 0 }, {"a": 0, "b": 0, "c": 1 } ],
"bar": [ {"a": 1, "b": 0, "c": 0 }, {"a": 1, "b": 0, "c": 1 } ],
.... MANY ITEMS .... ,
"qux": [ {"a": 0, "b": 0, "c": 0 } }
Я хочу сделать следующее:
import com.codahale.jerkson.Json
val dataSeq : Seq[Data] = Json.advanceToValue("foo").stream[Data](fileStream)
// NOTE: this will not compile since I pulled the "advanceToValue" out of thin air.
В качестве последнего замечания, я бы предпочел найти решение, в котором используется Jerkson или любые другие библиотеки, поставляемые с инфраструктурой Play, но если другая библиотека Scala справляется с этим сценарием с большей легкостью и достойной производительностью: я не против попробовать другую библиотеку . Если есть чистый способ ручного поиска в файле, а затем использование библиотеки Json для продолжения синтаксического анализа оттуда: меня это устраивает.
Чего я не хочу делать, так это загружать весь файл без потоковой передачи или использования итератора, поскольку единовременное хранение всего файла в памяти было бы непомерно дорогим.
ObjectMapper.reader().readValues(...)
, где можно перебирать отдельные значения массива (или последовательности корневого уровня). - person StaxMan   schedule 09.02.2013