2016-09-16 44 views
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 
+0

你解決了你的問題嗎? – Salem

+0

不是真的,沒有。暫時放棄了這一點,並簡單地使用一個簡單的Seq來處理它。可能會嘗試返回,稍後再看看問題。 –

+0

我又看了一遍;仍然會遇到同樣的問題。增加了額外的細節 - 可能是一個明顯的問題,但我只是沒有看到它爲什麼適用於簡單的情況,但不是更復雜的。 –

回答

0

如果不知道這是一個複製錯誤,但第一類是缺少第二個字段的名稱:

#         ↓↓↓ 
case class ObjSeries(id: String, Map[String, MyObj]) 

除此之外,你應該有什麼工作。你確定這是失敗的代碼嗎?

相關問題