0

我有一个具有泛型类型的抽象类,它从其子类中获取该泛型类型的 Json 格式。但抽象类也需要该类型序列的 Json 格式。在 Scala 中是否有任何方法可以仅基于这些事物的格式来获得一系列事物的 Json 格式?

我正在使用 Play Json 框架。

这是一个不完全符合我的情况的示例,但很好地表明了我想要实现的目标:

  package scalatest

  import scala.concurrent.Future
  import scala.concurrent.ExecutionContext.Implicits.global
  import scala.concurrent.Await
  import scala.concurrent.duration.Duration
  import java.util.UUID
  import scala.util.control.NonFatal
  import play.api.libs.json.Format
  import play.api.libs.json.Json

  object Banana {

     def main(args: Array[String]): Unit = {
        val f: Format[Seq[Banana]] = getSeqFormat(Json.format[Banana])
     }

     def getSeqFormat[T](format: Format[T]): Format[Seq[T]] = {
        ??? // TODO implement
     }
  }

  case class Banana(color: String)
4

1 回答 1

0

如果您只是想将香蕉序列化为 JSON 对象,那么您唯一需要做的就是定义Banana 隐式json 格式,其他格式(例如 Seq 格式)是内置在 play 中的:

import play.api.libs.json.Json

case class Banana(color: String)
object Banana {
  implicit val jsonFormat = Json.writes[Banana]
}

object PlayJsonTest extends App {
  val bananas = Seq(Banana("yellow"), Banana("green"))
  println(Json.toJson(bananas)) // [{"color":"yellow"},{"color":"green"}]
}

这也适用于其他类型,因为该Json#toJson方法定义如下:

// Give me an implicit `Writes[T]` and I know how to serialize it
def toJson[T](o: T)(implicit tjs: Writes[T]): JsValue = tjs.writes(o)

默认值是隐式使用的,其中包括大多数集合的格式。你可以在这里找到它们。

我希望这对你有帮助。

于 2017-03-10T14:28:58.190 回答