Это риф на ответ Анто , который должен обрабатывать вложенный JSON
input.toVector
.foldLeft((false, Vector.empty[Char], Vector.empty[String])) {
case ((true, charAccum, strAccum), '{') => (false, Vector('{'), strAccum :+ charAccum.mkString);
case ((_, charAccum, strAccum), '}') => (true, charAccum :+ '}', strAccum);
case ((_, charAccum, strAccum), char) => (false, charAccum :+ char, strAccum)
}
._3
По сути, он разбивает данные на Vector[Char]
и использует foldLeft
для объединения входных данных в подстроки. Хитрость заключается в том, чтобы отслеживать достаточно информации о предыдущем символе, чтобы выяснить, означает ли {
начало нового объекта.
Я использовал этот вход для его проверки (в основном образец ввода ОП, с вложенным вложенным объектом):
val input = """{"id":"2-2-3","key":{ "test": "value"}}{"id":"2-2-3","key":"value"}{"id":"2-2-3","key":"value"}{"id":"2-2-3","key":"value"}{"id":"2-2-3","key":"value"}"""
И получил такой результат, который выглядит неплохо:
Vector({"id":"2-2-3","key":{ "test": "value"}},
{"id":"2-2-3","key":"value"},
{"id":"2-2-3","key":"value"},
{"id":"2-2-3","key":"value"})