Spray Json:将Generic类型转换为JsonFormat

Pun*_*y V 1 scala spray-json

我有一个类似的课程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)
Run Code Online (Sandbox Code Playgroud)

当我使用这个特性时,我得到以下错误,以获得转换器KV类型.

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

但是如何在范围内引入通用数据类型.有人可以帮帮我吗?

Ale*_*kov 5

您需要为密钥类型和值类型提供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)
Run Code Online (Sandbox Code Playgroud)

将打印

{"key":"One","value":1}
Run Code Online (Sandbox Code Playgroud)