【问题标题】:How to include more than one item in my json object in scala?如何在 scala 中的 json 对象中包含多个项目?
【发布时间】:2020-06-04 19:54:17
【问题描述】:

我试图在我的 json 对象中包含多个项目(目前我只能添加一个项目),

在我的 scala 类中,我有:

case class Api(row:Int,name:String,age:Int)

Ok(Json.obj("status" -> "ok", "cars" -> carsBooked.map(_.row), "saved" -> saved, "failed" -> failed, "notBooked" -> Response.errors))

理想情况下,我想做carsBooked.map(_.row._name etc..)之类的事情

谢谢!

【问题讨论】:

  • 为什么不写ApiJson的转换并在.map中使用呢?或者甚至导出整个List 的转换?
  • @MateuszKubuszok 听起来很棒!你能分享你的代码sn-p吗?谢谢!
  • @MateuszKubuszok 你的意思是隐式 val residentFormat = Json.format[Api] ?
  • 基本上,是的,我就是这个意思

标签: scala playframework


【解决方案1】:

如果我们有

case class Api(row: Int, name: String, age: Int)

那么我们可以generate codecs automatically

object Api {
  implicit val apiReads: Reads[Api] = Json.reads[Api]
  implicit val apiWrites: OWrites[Api] = Writes.writes[Api]
}

然后我们可以写:

Ok(Json.obj("status" -> "ok", "cars" -> Json.toJson(carsBooked), "saved" -> saved, "failed" -> failed, "notBooked" -> Response.errors))

或者我们实际上也可以让它自动化:

case class ApiResult(
  status: String,
  cars: List[Api],
  saved: List[String],
  failed: List[String],
  notSaved: List[String]
)
object ApiResult {
  implicit val apiResultReads: Reads[ApiResult] = Json.reads[ApiResult]
  implicit val apiResultWrites: OWrites[ApiResult] = Writes.writes[ApiResult]
}
val apiResult: ApiResult = ...
Ok(Json.toJson(apiResult))

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 2017-09-23
    相关资源
    最近更新 更多