使用Play ScalaJson(https://www.playframework.com/documentation/2.4.x/ScalaJson)从scala case class
构建JSON我必须手动构建JsObject
或实现implicit Writes
(这实际上也意味着手动工作)。
使用lift-web json lib时,我可以定义implicit f Formats = net.liftweb.json.DefaultFormats
,所有转换都将在后台完成。
有什么方法可以使用play框架json lib在json中轻松转换scala case类吗?
答案 0 :(得分:2)
您可以使用宏为任何案例类OWrites[T]
定义实例或Reads[T]
,OFormat[T]
或T
。
implicit val writes: Writes[T] = play.api.libs.json.Json.writes[T]
// Same for Reads or OFormat
由于OFormat
或OWrites
已定义(隐含),因此可以使用.toJson
。
val jsValue: JsValue = Json.toJson(instanceOfT)
为了保持对象的特异性,即将JsValue
键入为JsObject
,可以直接调用.writes
。
val jsObj: JsObject = implicitly[OWrites[T]].writes(instanceOfT)
// works even if a OFormat is defined, as 'compatible'
由于定义了OFormat
或Reads
,因此可以使用.fromJson
。
val t: JsResult[T] = Json.fromJson[T](jsValue)
答案 1 :(得分:-1)
一个简单的解决方案是使用包含辅助函数的Play Json来处理JsValues,并在模型的伴随对象中定义隐式格式。此格式将在序列化和反序列化中隐式使用。以下是一个例子。
import play.api.libs.json.Json
case class User(name: String, age: Int)
object {
implicit val format = Json.format[User]
}
有关更全面的示例,请查看此存储库:https://github.com/luongbalinh/play-mongo/blob/master/app/models/User.scala