Spray Json :将泛型类型转换为 JsonFormat



我有一个类似于Pairs的类。 我有一个将这个Pairs类转换为 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类型的转换器。

错误:找不到类型的证据参数的隐式值 Convertor.this.JF[K] 隐式 val convertor = jsonFormat2(Pairs[K, V]( ^

但是我怎样才能将通用数据类型带入范围。有人可以帮助我吗?

您需要为键类型和值类型提供 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}

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

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

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

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

最新更新