Разбор JSON с другой схемой с помощью Play JSON - PullRequest
0 голосов
/ 06 июня 2018

Я должен проанализировать список сообщений 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?

...