web-dev-qa-db-ja.com

Play2でScalaリストをJSONにシリアル化する

ScalaオブジェクトのリストをPlay2のJSONマップに逆シリアル化しようとしています-JSONの非常に些細なユースケースだと思います。私のJSON出力は、次のようなものになります。

{
    "users": [
        {
            "name": "Example 1",
            "age": 20
        },
        {
            "name": "Example 2",
            "age": 42
        }
    ]
}

これを実現するために、"The Play JSONライブラリ"というタイトルのPlay2のJSONドキュメントを見ています。私にとって、それらの例は非常に些細なものであり、私はそれらが私のために働くことを確認しました。したがって、単一のUserオブジェクトを適切に逆シリアル化することができます。

しかし、ドキュメントを読んだとき、JSONでリストを含むマップを作成することはPlay2では少し冗長に思えます。私が食べていないものはありますか?

これは基本的に私の単純なScalaコード:

case class User(name: String, age: Int)

object UserList {
  implicit val userFormat = Json.format[User]  

  val userList = List(User("Example 1", 20), User("Example 2", 42))
  val oneUser = Json.toJson(userList(0)) // Deserialize one Scala object properly to JSON.
  // JSON: { "user" : [ <-- put content of userList here. How?
  //                  ]
  //       }
}

だから私の質問は次のようになります。 Playのドキュメントに示されているように、上記のuserListリストのコンテンツをJSONのハッシュに変換するには、各ハッシュ要素を明示的に書き出すよりも一般的な方法で変換するにはどうすればよいですか?

16
Johan Paul
scala> import play.api.libs.json._
import play.api.libs.json._

scala> case class User(name: String, age: Int)
defined class User

scala> implicit val userFormat = Json.format[User]
userFormat: play.api.libs.json.OFormat[User] = play.api.libs.json.OFormat$$anon$1@38d2c662

scala> val userList = List(User("Example 1", 20), User("Example 2", 42))
userList: List[User] = List(User(Example 1,20), User(Example 2,42))

scala> val users = Json.obj("users" -> userList)
users: play.api.libs.json.JsObject = {"users":[{"name":"Example 1","age":20},{"name":"Example 2","age":42}]}
37
Ionuț G. Stan