我正在尝试将Scala对象列表反序列化为Play2中的JSON映射 - 这是一个非常简单的JSON用例,我想说。我的JSON输出将是:
{
"users": [
{
"name": "Example 1",
"age": 20
},
{
"name": "Example 2",
"age": 42
}
]
}
为实现这一目标,我正在查看名为“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?
// ]
// }
}
所以我的问题是;如Play文档所示,我如何以更通用的方式将上面的userList
List的内容转换为JSON中的哈希,而不是显式地写出每个哈希元素?
答案 0 :(得分: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}]}