Spray Json:将通用类型转换为 Json 格式

Spray Json: Convert a Generic type to JsonFormat

我有一个 class 类似于 Pairs。 我有一个特性可以将 Pairs class 格式转换为 Json 格式。

import scala.reflect.ClassTag
import spray.json._
import spray.json.DefaultJsonProtocol

case class Pairs[K, V](key:K, value: V)

trait Convertor[K, V] extends DefaultJsonProtocol{
  implicit val convertor = jsonFormat2(Pairs[K, V])
}
val p = Pairs[String, Int]("One", 1)
println(p.toJson)

当我使用这个特性时,我得到了以下错误,需要一个 KV 类型的转换器。

error: could not find implicit value for evidence parameter of type Convertor.this.JF[K] implicit val convertor = jsonFormat2(Pairs[K, V]) ^

但是我怎样才能将通用数据类型引入范围。谁能帮帮我?

KV 可以是一切 (Any)。由于您没有所有 Convertor,因此您必须限制 KV.

case class Pairs[K <: PairKey, V <: PairValue](key:K, value: V)

现在您需要为 PairKeyPairValue 及其所有子项提供转换器。

您可以在此处找到信息:spray-json#jsonprotocol

您需要为键类型和值类型提供 JsonFormat。

这个代码

import spray.json.DefaultJsonProtocol._
import spray.json._
case class Pairs[K, V](key: K, value: V)
implicit def pairsFormat[K: JsonFormat, V: JsonFormat] = jsonFormat2(Pairs.apply[K, V])
val p = Pairs[String, Int]("One", 1)
println(p.toJson)

将打印

{"key":"One","value":1}