Я должен проанализировать список сообщений Json.Я использую Play Json
Все сообщения имеют схожую структуру, и на высоком уровне могут быть представлены как
case class JMessage(
event: String,
messageType: String,
data: JsValue // variable data structure
)
data
, могут содержать записи разных типов - Double, String, Int,поэтому я не могу пойти с картой.
В настоящее время существует как минимум три различных типа данных.Структура data
может быть идентифицирована как messageType
.
До сих пор я создал три класса case, каждый из которых представляет структуру data
.А также неявный Reads
для них.И четвертый, который является классом для результата с некоторыми Option
-al полями.Поэтому в основном мне нужно отобразить различные сообщения json в некоторый выходной формат.
В настоящее время я использую подход:
messages.map(Json.parse(_)).(_.as[JMessage]).map {
elem => {
if (elem.messageType == "event") {
Some(parseMessageOfTypeEvent(elem.data))
}
Some(..)
} else {
None
}
}
.filter(_.nonEmpty)
Функции parseMessageOfType%type%
в основном (v: type) => JsValue
.
Так что в конце концов у меня есть 4 класса case и 3 функции для разбора.Это работает, но уродливо.
Есть ли более красивый способ Scala?