1
我試圖將我的項目從play2-reactivemongo
版本0.10.5.0.akka23
遷移到使用版本0.11.7.play23
。我已經添加了以下進口來修復this question解決的問題:No Json序列化程序爲JsObject類型play.api.libs.json.JsValue
import play.modules.reactivemongo.json._
與前版本,下面的代碼工作:
val updateEntity = Json.obj("_id" -> Json.obj("$oid" -> id))
val entity = Json.parse(stringJson)
collection.update(updateEntity, entity)
然而,使用新版本,第三行給出一個編譯錯誤:
[error] No Json serializer as JsObject found for type play.api.libs.json.JsValue. Try to implement an implicit OWrites or OFormat for this type.
[error] collection.update(updateEntity, entity)
[error] ^
我已經嘗試引入一個隱含的OWriter
:
implicit val toJsObject: OWrites[JsValue] = OWrites.apply(_.as[JsObject])
但給出了一個隱含的聲明衝突:
[error] ambiguous implicit values:
[error] both value toJsObject of type play.api.libs.json.OWrites[play.api.libs.json.JsValue]
[error] and object JsObjectDocumentWriter in trait ImplicitBSONHandlers of type play.modules.reactivemongo.json.JsObjectDocumentWriter.type
[error] match expected type collection.pack.Writer[play.api.libs.json.JsObject]
[error] collection.update(updateEntity, entity)
[error] ^
改變第二線
val entity = Json.parse(stringJson).as[JsObject]
修復這個問題,但我有很多的這些在我的代碼,我希望爲更簡單的解決方案。
爲什麼不寫一個像'def parseJson(json:String)= {Json.parse(json).as [JsObject]}'這樣的函數,而是使用這個函數。 – curious
@curious我很希望有一個神奇的導入,它會添加我缺少的隱式轉換。創建你所建議的函數仍然需要我在代碼中改變所有出現的'Json.parse',並且我認爲只要在每個地方添加'.as [JsObject]'都沒有多大好處。 –