我正在使用Spray-json 1.3.1。我有以下JSON消息:
{
"results": [{
... NOT IMPORTANT PART HERE ...
}],
"status": "OK"
}
通常,可以通过
将其反序列化为status
字符串字段
case class Message[T](results: List[T], status: String)
使用自定义协议
object MessageProtocol extends DefaultJsonProtocol {
implicit def messageFormat[T: JsonFormat] = jsonFormat2(Message.apply[T])
}
由于status
字段可以是OK
之一,ZERO_RESULTS
,OVER_QUERY_LIMIT
将此字段作为字符串无效。因为我来自
Java背景我在Scala中尝试了枚举实现如下:
case class Message[T](results: List[T], status: Status)
object Status extends Enumeration{
type Status = Value
val OK,ZERO_RESULTS,OVER_QUERY_LIMIT, REQUEST_DENIED, INVALID_REQUEST,UNKNOWN_ERROR = Value
}
object MessageProtocol extends DefaultJsonProtocol {
implicit val statusFormat = jsonFormat(Status)
implicit def messageFormat[T: JsonFormat] = jsonFormat2(Message.apply[T])
}
解决此问题的最佳做法/方法是什么?
答案 0 :(得分:1)
您可以简单地实现自己的RootJsonFormat(作为Message伴随对象中的隐式)并覆盖读写函数。在那里你将拥有JsObject,你可以将它转换为你自己的case类,就像你想要将字符串转换为所需的枚举等一样。你可以看到样本here