2017-11-03 15 views
1

JSONを再生する--JsonハンドリングのためにScalaでこれをどのように生成するのですか?私は現在、Scalaでこれを持って、そしてそれは私が何をしたいん

private def prepareResponse(response: Array[SomeItem]): String = { 
    implicit val writes = Json.writes[SomeItem] 

    Json.stringify(JsObject(Map("message" -> Json.toJson(response)))) 
    } 

は、しかし、私は私がいる限りJson.writesがあるので、応答としてそれに何かを入れて、できるように、これをgenerifyしたいです私がJsonに変換しようとしている型のために定義されていれば、それは文字列化されます。例えば

:それはAnyのために定義された暗黙の書き込みがないことを言うように

private def prepareResponse(response: Any): String = { 
    implicit val writes = Json.writes[SomeItem] 
    implicit val writes2 = Json.writes[SomeOtherItem] 
    ... 

    Json.stringify(JsObject(Map("message" -> Json.toJson(response)))) 
    } 

これは、もちろん、動作しません。私はエラーを取得するよう、またAnyための1つを追加動作しません:

No unapply or unapplySeq function found 
[scalac-2.11]  implicit val writeAny = Json.writes[Any] 
[scalac-2.11]  

これに「正しい」方法(もしあれば)を行うための理想的な方法は何ですか?

ありがとうございます!

答えて

1
import play.api.libs.json._ 

case class SomeItem(a: String, b: String) 

object SomeItem { 
    implicit val codec = Json.format[SomeItem] 
} 

case class SomeOtherItem(a: String, b: String, c: String) 

object SomeOtherItem { 
    implicit val codec = Json.format[SomeOtherItem] 
} 

// ... 

object PlayJson extends App { 
    def prepareResponse[T](response: T)(implicit tjs: Writes[T]): String = { 
    Json.stringify(JsObject(Map("message" -> Json.toJson(response)))) 
    } 

    println(prepareResponse(SomeItem("aa", "bb"))) 
    println(prepareResponse(SomeOtherItem("aa", "bb", "cc"))) 
    // ... 
} 
関連する問題

 関連する問題