使用JSON格式宏将_id转换为id

时间:2013-08-16 13:55:15

标签: playframework-2.1 reactivemongo

我在Play应用程序中使用reactivemongo。我的模型使用属性id而不是_id。如何自动转换对象ID(_id),以便将其映射到我的模型的id属性。

目前我手工编写格式:

implicit val adviceFormat = (
  (__ \ '_id).format[BSONObjectID] and
  (__ \ 'lang).format[Lang] and
  (__ \ 'title).format[String] and
  (__ \ 'text).format[String] and
  (__ \ 'reads).formatNullable[Seq[PeriodCounter]] and
  (__ \ 'creationDate).format[DateTime] and
  (__ \ 'updateDate).format[DateTime]
)(Advice.apply, unlift(Advice.unapply))

但我只想写:

implicit val adviceFormat = Json.format[Advice]

更新

根据trevor.reznik的回答,我已经弄明白了。

implicit val adviceJSONReads = __.json.update((__ \ 'id).json.copyFrom((__ \ '_id).json.pick[JsObject] )) andThen Json.reads[Advice]
implicit val adviceJSONWrites = Json.writes[Advice].transform( js => js.as[JsObject] - "id"  ++ Json.obj("_id" -> js \ "id") )

1 个答案:

答案 0 :(得分:2)

对于Json写道,您可以执行以下操作:

val userWrites = Json.writes[User].transform( js => js.as[JsObject] - "id"  ++ Json.obj("_id" -> js \ "id") )

但是我不确定你能用读取做类似的事情。