我有一个类似于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)
当我使用此特征时,我收到以下错误,以具有用于K
和V
类型的转换器。
错误:找不到类型的证据参数的隐式值 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}
K
和V
可以是一切(Any
(。由于您没有所有Convertor
,因此您必须限制K
和V
。
case class Pairs[K <: PairKey, V <: PairValue](key:K, value: V)
现在,您需要为PairKey
和PairValue
及其所有子项提供转换器。
您可以在此处找到信息: spray-json#jsonprotocol