簡體   English   中英

如何在Play framework 2.3.x(Scala)中將case類轉換為JSON?

[英]How to convert case class to JSON in Play framework 2.3.x (Scala)?

任何人都可以告訴我如何使用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 但是我仍然在下面的隱含問題上有錯誤。

我已經閱讀了本教程 ,但是當我嘗試隱式的Writes[Foo]代碼時:

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

我得到Can't resolve symbol and Can't resolve symbol unlift中的Can't resolve symbol unlift錯誤。 此外,教程的代碼看起來很復雜,只是為了將對象轉換為JSON。 我想知道是否有更簡單的方法來做到這一點?

您可以使用Json.writes獲取Writes[Foo]實例:

implicit val fooWrites = Json.writes[Foo]

將此隱含在范圍內是將Foo轉換為JSON所需的全部內容。 有關JSON讀/寫的更多信息,請參閱此處此處的文檔。

第二個問題 - Can't resolve symbol and - 是Scala插件1.3版中引入的Intellij錯誤 在Scala插件的1.3.3版本中,現在有一個解決方法 - 設置首選項復選框:

語言和框架> Scala> Core(默認)選項卡>使用舊的隱式搜索算法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM