【问题标题】:Serializing a Scala List to JSON in Play2在 Play2 中将 Scala 列表序列化为 JSON
【发布时间】:2013-07-15 01:41:37
【问题描述】:

我正在尝试将 Scala 对象列表反序列化为 Play2 中的 JSON 映射 - 我会说,这是一个非常简单的 JSON 用例。我的 JSON 输出大致如下:

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

为了实现这一点,我查看了 Play2 的 JSON 文档,标题为 “The Play JSON library”。对我来说,他们的例子非常微不足道,我已经确认它们对我有用。因此,我能够正确反序列化单个 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 列表的内容转换为 JSON 中的散列?

【问题讨论】:

  • 那不是序列化而不是反序列化吗?你不是想把你的对象转换成 JSON 吗?

标签: json scala playframework playframework-2.0


【解决方案1】:
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}]}

【讨论】:

  • 哇哦 - 这很简单!我必须再次阅读文档。想知道为什么没有更清楚地说明这一点 - 或者我错过了。谢谢!!
  • 我必须说,仅仅通过阅读 www.playframework.com 上有关 Play 的 JSON 支持的文档,我永远不会想出如何实现我想要的 - 以及你粘贴的内容。文档似乎很垃圾。
  • @JohanPaul 是的,在某些时候您必须查看方法签名并阅读源代码(在这种特殊情况下,查看 Play 已经定义了 Writes 类型类的哪些实例) .
  • @IonuțG.Stan 你是如何将所有播放 jar 导入 scala 控制台的?我试图重现你的命令,但我不能。
  • @angelokh 我从本地 Play 项目目录中的 sbt 会话内部启动了 scala 控制台。我在这篇博文igstan.ro/posts/… 中描述了一个替代方案。希望对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
  • 2012-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多