【问题标题】:How to convert case class to JSON in Play framework 2.3.x (Scala)?如何在 Play framework 2.3.x (Scala) 中将案例类转换为 JSON?
【发布时间】:2015-03-05 07:41:22
【问题描述】:

任何人都可以告诉我如何使用 Scala 在 Play 框架(尤其是 Play v2.3.x)中将案例类类实例转换为 JSON?

例如我有这样的代码:

case class Foo(name: String, address: String)

def index = Action {
      request => {
        val foo = Foo("John Derp", "Jem Street 21")  // I want to convert this object to JSON
        Ok(Json.toJson(foo))    // I got error at here
      }
}

错误信息:

无法编写 com.fasterxml.jackson.data bind.JsonNode 的实例 到 HTTP 响应。尝试定义一个 可写[com.fasterxml.jackson.databind.JsonNode]

更新:我发现上面的错误是由于Json类的错误导入引起的,应该是:import play.api.libs.json.Json。但是我仍然在下面的隐式问题上遇到错误。

我已经阅读了this tutorial,但是当我尝试隐含的Writes[Foo] 代码时:

  implicit val fooWrites: Writes[Foo] = (
        (JsPath \ "name").write[String] and
            (JsPath \ "address").write[String]
        )(unlift(Foo.unapply))

我在 Intellij 中遇到了 Can't resolve symbol and 和 Can't resolve symbol unlift 错误。此外,教程的代码看起来很复杂,只是为了将对象转换为 JSON。我想知道是否有更简单的方法可以做到这一点?

【问题讨论】:

    标签: json scala playframework playframework-2.0


    【解决方案1】:

    您可以使用Json.writes 获取Writes[Foo] 实例:

    implicit val fooWrites = Json.writes[Foo]
    

    将Foo 转换为 JSON 所需的所有内容都包含在范围内。有关 JSON 读/写的更多信息,请参阅文档 here 和 here。

    【讨论】:

    • 您好,非常感谢。你知道我在哪里可以找到关于在 Play 2.3 中使用 Json 的简单指南或文档吗?另外,您能解释一下我尝试过的原始隐式写入中的错误Can't resolve symbol and(以及unlift)吗? (见更新的问题,我已经把代码放在那里了)
    • 要解决符号错误,您需要导入play.api.libs.functional.syntax._。我提供的文档链接应该可以回答您关于 unlift 的问题,并包含有关 Play JSON 的足够一般信息。
    • 您好,再次感谢您的帮助。我想知道为什么 Intellij 无法检测到导入。
    【解决方案2】:

    第二个问题 - Can't resolve symbol and - 是 Scala 插件 1.3 版中引入的 Intellij bug。在 Scala 插件的 1.3.3 版中,现在有一个解决方法 - 设置首选项复选框:

    语言和框架 > Scala > 核心(默认)选项卡 > 使用旧的 隐式搜索算法

    【讨论】:

      猜你喜欢
      • 2015-07-17
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多