4

我是 scala 和 playframework 的新手,但到目前为止它很棒。我无法弄清楚如何将数据列表转换为 json(或任何复杂的结构)。这不是一个真实的例子,但这是我想要做的。从数据库中获取一些数据。

scala> val result:List[(Long,String)] = DB.withConnection { implicit c => 
    SQL("select * from users").as(
     long("id")~str("uid") map(flatten)*)
  }
 result: List[(Long, String)] = List((3,397a73ee5150429786863db144341bb3), (4,2850760dc9024c16bea6c8c65f409821), (5,636ee2bf758e4f699f27890ac55d7db2))

我希望能够将其转换为 json 并返回。基于this doc,看起来我需要遍历并在结果上调用 toJson

http://www.playframework.org/documentation/2.0/ScalaJson

但是,在实践中我很难做到这一点。这甚至是正确的方法吗?是否有一些 scala 概念可以使这变得简单?我看到了一些使用案例类的示例,但我还没有完全理解这个概念。

我真的不希望这会起作用,但是,我想我在概念上正在尝试做这样的事情

scala> toJson(Map("response" -> result))
<console>:27: error: No Json deserializer found for type     scala.collection.immutable.Map[java.lang.String,List[(Long, String)]]. Try to implement an     implicit Writes or Format for this type.
          toJson(Map("response" -> result))

谢谢

4

1 回答 1

3

如前所述,您可以编写自己的隐式写入来执行此操作,但您也可以依赖现有的写入并将您的数据检索为 aList[Map[String, Any]]并应用 toJson :

val simple = {
    get[Pk[Long]]("user.id") ~
    get[Long]("user.uid") map {
        case id~uid => Map("id" -> id.get.toString, "uid" -> uid.toString)
    }
}
val result:List[Map(String,String)] = DB.withConnection { implicit c => 
    SQL("select * from users").as(User.simple *)
}
于 2012-05-27T10:16:03.113 回答