2016-04-28 6 views
5

このJSONの自動マッピングの例は、プレイのドキュメントには記載されていません。どうして? https://www.playframework.com/documentation/2.5.x/ScalaJsonAutomatedscala play json unapplyまたはunapplySeq関数が見つかりません

libraryDependencies += "com.typesafe.play" %% "play" % "2.5.0" 
--- 
import play.api.libs.json._ 
case class Resident(name: String, age: Int, role: Option[String]) 
implicit val residentWrites = Json.writes[Resident] 
println(Json.toJson(Resident("john", 33, None))) 
--- 
Error: No unapply or unapplySeq function found 
     implicit val residentWrites = Json.writes[Resident] 
+0

私にとっては、それは単に失敗しません。私はamm replを開き、 'load.ivy(" com.typesafe.play "%%" play "%" 2.5.0 ")'を介して依存関係を取得し、 '{" name ":" john " 、 "age":33} 'このエラーは、通常、 'class'が' caseクラス 'ではない場合に発生しますが、ここではすべて正常です。 –

+0

うわー、私はアンモン人について知らなかった!それは素晴らしい、私は今これを試してみる –

+0

はい、それは私のためにもamm replから動作します。 :O私は再びプロジェクト –

答えて

6

問題のあるコードは、多かれ少なかれ、そのように見えた:

import play.api.libs.json._ 

object Test { 
    def main(args: Array[String]): Unit = { 
    case class Resident(name: String, age: Int, role: Option[String]) 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

ここでの問題は、このマクロは明らかにメソッド内で定義されたクラスのために動作しないということでした。これは問題ではありませんが、私たちはむしろこのようなことをしません。問題のクラスDEFを解決するには

は、オブジェクトレベルのように、どこか別の場所に移動することができ

object Test { 
    case class Resident(name: String, age: Int, role: Option[String]) 

    def main(args: Array[String]): Unit = { 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

またはファイルレベル

case class Resident(name: String, age: Int, role: Option[String]) 

object Test { 
    def main(args: Array[String]): Unit = { 
    implicit val residentWrites = Json.writes[Resident] 
    println(Json.toJson(Resident("john", 33, None))) 
    } 
} 

私は、これは最低限の例を見るためにテスト目的のためだけだったことを理解しますが私はまだ、普通にクラスを定義する方法をWritesと言います。

object Resident { 
    implicit val residentWrites = Json.writes[Resident] 
} 

case class Resident(name: String, age: Int, role: Option[String]) 

この方法であなたはResidentをインポートするたびに、その書き込みは暗黙のスコープになります。

+0

エラーが最初に出現したとき、ケース・クラスdefはオブジェクト・レベルにありました。私は、問題を示すために最小限の例を構築するときにメソッド内に移動しました。しかし私は、私は違う種類のエラーが出ていたことに気付かなかった。 –

+0

他のエラーを再現できれば、私もそれに対処できます。 –

+0

thx。私はこの問題を発見しました。依存関係の暗黙の 'Json.write'が見つかりませんでした。 –

関連する問題