我使用內置的jerson與playframework 2,和所有我想要的是序列化映射,包含不同類型的值:Jerkson。序列化映射到JsValue
object AppWriter extends Writes[Application] {
def writes(app: Application): JsValue = {
Json.toJson(Map(
"id" -> app.getId.toString,
"name" -> app.getName,
"users" -> Seq(1, 2, 3)
))
}
}
在這種情況下,我有:
No Json deserializer found for type scala.collection.immutable.Map[java.lang.String,java.lang.Object].
Try to implement an implicit Writes or Format for this type
通過框架代碼Navigatin顯示有地圖[字符串,V]類型的序列化程序隱式def mapWrites [V] ..,但我不明白爲什麼它不適用。
任何人都可以幫助我嗎?
UPD:我找到簡單的解決方法:
object AppWriter extends Writes[Application] {
def writes(app: Application): JsValue = {
Json.toJson(Map[String, JsValue](
"id" -> JsNumber(BigDecimal(app.getId)),
"name" -> JsString(app.getName),
"users" -> JsArray(Seq(1, 2, 3).map(x => JsNumber(x)))
))
}
}
,但事實並非如此優雅...
你爲什麼要在這樣的地圖中存儲數據?地圖通常是一個關鍵值存儲區,其中所有值的類型都是相同的。您應該只使用一個案例類來爲這些數據建模。 –
@ DominicBou-Samra,想法聽起來不錯,但看起來像沒有從case class,string only生成JsValue的方法。 –