2
所以我基本上有這樣的代碼:如何序列化Scala的地圖<字符串,MyObj中>在播放框架
case class MyObj(value:String, unit: String)
case class ObjSeries(id: String, myObjs: Map[String, MyObj])
但是,創建作家如:
implicit val myObjWrites = Json.writes[MyObj]
implicit val objSeriesWrites: Writes[ObjSeries] = (
(JsPath \ "id").write[String] and
(JsPath \ "myObjs").write[Map[String, MyObj]]
)(unlift(ObjSeries.unapply))
與「重載方法值應用失敗與替代品 - 不能應用於......「。
我錯過了什麼?
以上當然是一個簡單的例子;我正在處理的實際數據結構稍微複雜一些。實際的例子是一個類:
case class ObservationSeries(
sourceId: Option[String],
geometry: Option[Point],
levels: Option[Seq[Level]],
referenceTime: Option[String],
observations: Option[Map[String, Observation]]
)
和錯誤消息雲:
overloaded method value apply with alternatives:
[error] [B](f: B => (Option[String], Option[no.met.geometry.Point], Option[Seq[no.met.geometry.Level]], Option[String], Option[scala.collection.immutable.Map[String,models.Observation]]))(implicit fu: play.api.libs.functional.ContravariantFunctor[play.api.libs.json.OWrites])play.api.libs.json.OWrites[B] <and>
[error] [B](f: (Option[String], Option[no.met.geometry.Point], Option[Seq[no.met.geometry.Level]], Option[String], Option[scala.collection.immutable.Map[String,models.Observation]]) => B)(implicit fu: play.api.libs.functional.Functor[play.api.libs.json.OWrites])play.api.libs.json.OWrites[B]
[error] cannot be applied to (models.ObservationSeries => (Option[String], Option[no.met.geometry.Point], Option[Seq[no.met.geometry.Level]], Option[String], Option[scala.collection.Map[String,models.Observation]]))
[error] (JsPath \ "referenceTime").writeNullable[String] and
你解決了你的問題嗎? – Salem
不是真的,沒有。暫時放棄了這一點,並簡單地使用一個簡單的Seq來處理它。可能會嘗試返回,稍後再看看問題。 –
我又看了一遍;仍然會遇到同樣的問題。增加了額外的細節 - 可能是一個明顯的問題,但我只是沒有看到它爲什麼適用於簡單的情況,但不是更復雜的。 –