提供寫明確和處理,其中Any
可以是int,長,浮動,雙,字符串,布爾等
case class Foo(x:String, y:Any)
implicit val writes = new Writes[Foo] {
override def writes(o: Foo): JsValue = {
Json.obj("x" -> o.x) ++ {
o.y match {
case a: Int => Json.obj("y" -> a)
case a: Long => Json.obj("y" -> a)
case a: Float => Json.obj("y" -> a)
case a: Double => Json.obj("y" -> a)
case a: String => Json.obj("y" -> a)
case a: Boolean => Json.obj("y" -> a)
case a => Json.obj("y" -> a.toString)
}
}
}
}
斯卡拉REPL案件
scala> Json.toJson(Foo("foo", true))
res5: play.api.libs.json.JsValue = {"x":"foo","y":true}
scala> Json.toJson(Foo("foo", 1.toFloat))
res6: play.api.libs.json.JsValue = {"x":"foo","y":1}
scala> Json.toJson(Foo("foo", (1.131313).toFloat))
res7: play.api.libs.json.JsValue = {"x":"foo","y":1.1313129663467407}
scala> Json.toJson(Foo("foo", (1.131313).toDouble))
res8: play.api.libs.json.JsValue = {"x":"foo","y":1.131313}
你怎麼能指望它要序列化?由於「任何」可能(從字面上看)任何事物,它可能具有非常不同的可能序列化。順便說一句,如果你只想序列化,你應該使用'Json.writes [Foo]'。 –