为泛型类型的 Seq 获取 Json 格式
Get a Json format for a Seq of a generic type
我有一个带有通用类型的抽象 class,它从其子class 中获取该通用类型的 Json 格式。但是抽象 class 还需要该类型序列的 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)
如果您只是想将香蕉序列化为 JSON 对象,那么您唯一需要做的就是定义 Banana
implicit 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)
隐式使用默认值,其中包括大多数集合的格式。你可以找到它们 here.
希望对你有帮助。
我有一个带有通用类型的抽象 class,它从其子class 中获取该通用类型的 Json 格式。但是抽象 class 还需要该类型序列的 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)
如果您只是想将香蕉序列化为 JSON 对象,那么您唯一需要做的就是定义 Banana
implicit 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)
隐式使用默认值,其中包括大多数集合的格式。你可以找到它们 here.
希望对你有帮助。