我正在尝试包装spray-json解析器,使其返回Option
而不是抛出异常。
作为第一步,我只是尝试用自己的方法包装该方法,但是我在使它成为通用方法时遇到了问题。
解析器使用隐式格式对象(为我正在使用的具体类型定义)但是当方法是通用的时,编译器会抱怨:
[error] Cannot find JsonReader or JsonFormat type class for T
[error] def parse[T](s: String): T = JsonParser(s).convertTo[T]
以下是相关代码:
case class Person(name: String)
object Protocols {
implicit val personFormat = jsonFormat1(Person)
}
import spray.json._
object Parser {
import com.rsslldnphy.json.Protocols._
// JsonParser(s).convertTo[Person] works fine, but..
def parse[T](s: String): T = JsonParser(s).convertTo[T] // .. doesn't
}
我需要做些什么才能让它发挥作用?
答案 0 :(得分:5)
您需要传递所需的隐式值,这可以使用“上下文绑定”快捷方式表示法方便地完成:
def parse[T : JsonReader](s: String): T =
JsonParser(s).convertTo[T]
这相当于:
def parse[T](s: String)(implicit reader: JsonReader[T]): T =
JsonParser(s).convertTo[T]