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に変換して返すことができるようにしたいと思います。このドキュメントに基づくと、結果を繰り返し処理して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

前述のように、それを行うために独自の暗黙的な書き込みを書き込むことができますが、既存の書き込みに依存して、データをとして取得し、List[Map[String, Any]]それにJsonに適用することもできます。

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 に答える