Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
播放JSON-如何在Scala中生成JSON处理?_Json_Scala_Play Json - Fatal编程技术网

播放JSON-如何在Scala中生成JSON处理?

播放JSON-如何在Scala中生成JSON处理?,json,scala,play-json,Json,Scala,Play Json,我目前在scala中有这个,它可以满足我的需要: private def prepareResponse(response: Array[SomeItem]): String = { implicit val writes = Json.writes[SomeItem] Json.stringify(JsObject(Map("message" -> Json.toJson(response)))) } 但是,我想将其泛化,这样我就可以将其作为响应,只要为我试图

我目前在scala中有这个,它可以满足我的需要:

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

    Json.stringify(JsObject(Map("message" -> Json.toJson(response))))
  }
但是,我想将其泛化,这样我就可以将其作为响应,只要为我试图转换为Json的类型定义了Json.writes,它就会将其字符串化

例如:

  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
定义隐式写。为
Any
添加一个也不起作用,因为我得到了错误:

 No unapply or unapplySeq function found
[scalac-2.11]     implicit val writeAny = Json.writes[Any]
[scalac-2.11]     
以“正确”的方式(如果有的话)做这件事的理想方式是什么

提前谢谢

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")))
  // ...
}