使用Play json

时间:2018-06-06 14:43:52

标签: json scala play-json

我必须解析一个Json消息列表。我正在使用Play Json

所有消息都具有相似的结构,并且在高级别可以表示为

case class JMessage(
  event: String,
  messageType: String,
  data: JsValue // variable data structure
)

data可能包含不同类型的条目 - Double,String,Int,所以我不能使用Map。

目前至少有三种不同类型的数据。 data的结构可以由messageType标识。

到目前为止,我已经创建了三个案例类,每个案例类代表data的结构。以及它们的隐式Reads。第四个是结果的案例类,有一些Option - 字段。所以基本上我需要将各种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个案例类和3个解析函数。它有效,但很难看。

是否有更美丽的Scala方式?

0 个答案:

没有答案