【发布时间】:2014-09-09 09:30:38
【问题描述】:
我无法理解为什么它会在以下行引发错误:
val anyReads = Reads[Any](m => metaValueToJsValue(m))
错误信息:type mismatch; found : play.api.libs.json.JsValue required: play.api.libs.json.JsResult[Any] Note: implicit value readsMap is not applicable here because it comes after the application point and it lacks an explicit result type
我在下面粘贴了我的代码。 任何帮助表示赞赏!谢谢!
import play.api.libs.json._
import play.api.libs.json.util._
import play.api.libs.functional.syntax._
case class TempClass(
metaValue: Option[Map[String, Any]])
object TempClass {
val anyReads = Reads[Any](m => metaValueToJsValue(m))
def metaValueToJsValue(m: Any): JsValue = {
m match {
case s: String => JsString(s)
case n: Int => JsNumber(n): JsValue
case n: Long => JsNumber(n): JsValue
case n: Double => JsNumber(n): JsValue
case n: BigDecimal => JsNumber(n): JsValue
case b: Boolean => JsBoolean(b)
case l: Seq[Any] => JsArray(l.map(metaValueToJsValue)): JsValue
}
}
implicit val readsMap = Reads[Map[String, Any]](m => Reads.mapReads[Any](anyReads).reads(m))
implicit val reads = Json.reads[TempClass]
}
【问题讨论】:
-
您需要将类型归因于您的隐式 val。参考stackoverflow.com/questions/2731185/…
-
隐式 val readsMap: Reads[Map[String, Any]] = Reads[Map[String, Any]](m => Reads.mapReads[Any](anyReads).reads(m))隐式 val 读取:Reads[TempClass] = Json.reads[TempClass] 虽然上面没有效果:/我做错了吗?