在Play2中将Scala列表序列化为JSON

Joh*_*aul 16 json scala playframework playframework-2.0

我试图将Scala对象列表反序列化为Play2中的JSON映射 - 这是一个非常简单的JSON用例,我想说.我的JSON输出将是:

{
    "users": [
        {
            "name": "Example 1",
            "age": 20
        },
        {
            "name": "Example 2",
            "age": 42
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

为实现这一目标,我正在研究名为"Play JSON库"的Play2 JSON文档.对他来说,他们的例子非常简单,我已经证实他们适合我.因此,我能够User正确地反序列化单个对象.

但是,当我阅读文档时,在Play2中制作包含JSON列表的地图似乎有点冗长.有没有我不喜欢的东西?

这基本上是我简单的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?
  //                  ]
  //       }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是; userList如Play文档建议的那样,我如何以比显式写出每个哈希元素更通用的方式将上面List 的内容转换为JSON中的哈希?

Ion*_*tan 37

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}]}
Run Code Online (Sandbox Code Playgroud)

  • 我必须说,仅仅通过阅读www.playframework.com上有关Play的JSON支持的文档,我就不会想到如何实现我想要的 - 以及你粘贴的内容.文档看起来很垃圾. (2认同)
  • @angelokh我在本地播放的Play项目目录中的sbt会话中启动了scala控制台.我在这篇博客文章http://igstan.ro/posts/2013-05-17-explore-jvm-libraries-in-a-quick-sbt-session.html中描述了另一种选择.希望能帮助到你. (2认同)