【问题标题】:Render json data to the view with play! scala 2.2.3使用 play 将 json 数据渲染到视图中!斯卡拉 2.2.3
【发布时间】:2014-09-23 09:16:27
【问题描述】:

这是一个初学者的问题:

我已经这样定义Event

case class Event(id: Pk[Long], name: String, userId: Pk[Long])

object Event {
  private val EventParser: RowParser[Event] = {
    get[Pk[Long]]("id") ~
    get[String]("name") ~
    get[Pk[Long]]("userId") map {
      case id ~ name ~ userId => Event(id, name, userId)
    }
  }

  def findAll(): Seq[Event] = {
    DB.withConnection { implicit connection =>
      SQL("select * from events").as(EventParser *)
    }
  }
}

然后我将它渲染到这样的视图中:

  def events = Action {
    val events: Seq[Event] = Event.findAll()

    Ok(views.html.events(events))
  }

但我想返回 Json 数据。

Json.toJson(events) 无法使用,因为事件类型为 Seq。 我没有找到关于这个主题的好教程,我尝试遵循这个答案:play framework working with json objects in Scala 但它似乎不适用于 play 2.2。

所以我的问题是:您知道在访问数据库后将 Json 中的序列渲染到视图的简单方法吗?

【问题讨论】:

  • 您是否为Event 定义了Writes
  • 我试过但没有成功,因为我找到的答案不适用于游戏! 2.2.3,有链接吗? (我是 Play 新手!)
  • 你是什么意思他们不工作? json api 在过去一年左右没有太大变化:playframework.com/documentation/2.3.x/ScalaJsonCombinators
  • 对不起,我刚开始玩!我已经读过,但没有成功的类型序列。

标签: json scala playframework-2.0


【解决方案1】:

试试这个:

import play.api.libs.json._

object Event {

  ...

  implicit def pkWrites[T : Writes]: Writes[Pk[T]] = Writes {
    case anorm.Id(t) => implicitly[Writes[T]].writes(t)
    case anorm.NotAssigned => JsNull
  }
  implicit val eventWrites = Json.writes[Event]
}

【讨论】:

  • 非常感谢您的回复,但您能解释一下如何将其渲染到视图中吗? (对不起,我很新玩,对我来说有点难......)
  • 只需使用 Json.toJson(events)。 Scala 会找到将 Event 转换为 JSON 的隐式写入(并将使用它来构建 Seq[Event] 写入)。
猜你喜欢
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2011-08-28
相关资源
最近更新 更多