使用scala play,如何将具有ObjectId的类转换为Json?

时间:2018-04-05 10:44:16

标签: json mongodb scala playframework

我有一个案例类:

case class Branch(
_id: ObjectId,
rootcommit: Option[ObjectId],
name: String,
commits: List[ObjectId]
)

我希望在

后将其转换为json
implicit val format = Json.format[Branch]

但我收到此错误

No implicit format for org.mongodb.scala.bson.ObjectId

implicit val format = Json.format[ObjectId]

导致

No unapply function found
[error]   implicit val format = Json.format[ObjectId]

2 个答案:

答案 0 :(得分:2)

我必须明确定义格式:

implicit val objectIdFormat: Format[ObjectId] = Format(
    Reads[ObjectId] {
      case s: JsString => if (ObjectId.isValid(s.toString)) JsSuccess(new ObjectId(s.toString)) else JsError()
      case _           => JsError()
    },
    Writes[ObjectId]((o: ObjectId) => JsString(o.toHexString))
)

答案 1 :(得分:1)

您可以尝试为案例类创建一个伴随对象,并将Json.format放入其中:

case class Branch(
                   _id: ObjectId,
                   rootcommit: Option[ObjectId],
                   name: String,
                   commits: List[ObjectId]
                 )

object Branch {
  implicit val format: OFormat[Branch] = Json.format[Branch]
}

然后你用以下的东西解析Json:

...
thing =>
  Json.parse(thing).as[Branch]
...

......或任何适合您用户需要的东西。