【发布时间】:2018-05-29 21:17:30
【问题描述】:
当我尝试使用 play2 在 Scala 中读取 Json 时,我被卡住了,使用这些信息来创建一个对象。 这是我现在的代码:
trait MyTrait {
}
object object1 extends MyTrait {
override def toString: String = "object1"
}
object object2 extends MyTrait{
override def toString: String = "object2"
}
def strToObject(str: String): MyTrait = str match {
case "object1" => object1
case "object2" => object2
}
这就是我写 Json 的方式:
implicit val traitWrites = new Writes[MyTrait] {
def writes(t: MyTrait) = Json.obj(
"t" -> t.toString)
}
输出
println("object1: " + Json.toJson(object1).toString)
println("object2: " + Json.toJson(object1).toString)
object1: {"t":"object1"}
object2: {"t":"object1"}
这就是我尝试阅读的方式,但它不起作用。
implicit val traitReads: Reads[MyTrait] = (
(JsPath \ " t" ).read[String])map(str => strToObject(str)) (MyTrait.apply _)
val jsonObject = Json.parse(Json.toJson(object1).toString)
val aux = jsonObject \ "t"
val myobject = aux.as[MyTrait]
它抱怨 (MyTrait.apply _) 和 [MyTrait] 带有“未找到:值 MyTrait”。然而,这与我对标准课程所做的完全相同,所以我真的不知道如何进行。
有什么想法吗?我是 Play 的新手(当然也是 Scala 的新手),所以我可能在做一些非常基本的错误。特别是,我高度怀疑“地图”调用。
干杯,
【问题讨论】:
-
最新版本自动支持密封特征
标签: json scala playframework-2.0