Scala 如何创建一个函数,该函数只接受可以使用spray json转换为json的类型
我有一个函数,它将接受某种类型的参数,将该参数转换为JSON,然后返回它。这里的问题是,我的函数无法对参数调用.toJson,因为它不知道它 例如:Scala 如何创建一个函数,该函数只接受可以使用spray json转换为json的类型,scala,spray,spray-json,Scala,Spray,Spray Json,我有一个函数,它将接受某种类型的参数,将该参数转换为JSON,然后返回它。这里的问题是,我的函数无法对参数调用.toJson,因为它不知道它 例如: def convertToJson[A](toConvert: A): JsValue = toConvert.toJson 这显然不起作用,但我想知道我怎样才能做出类似的工作?如何将此函数推广到所有可序列化的case类?我无法添加任何统一类型,以允许此函数接受所有可序列化的case类 如果需要更多信息或更好的解释,请让我知道 toJson
def convertToJson[A](toConvert: A): JsValue =
toConvert.toJson
这显然不起作用,但我想知道我怎样才能做出类似的工作?如何将此函数推广到所有可序列化的case类?我无法添加任何统一类型,以允许此函数接受所有可序列化的case类
如果需要更多信息或更好的解释,请让我知道 toJson方法由隐式扩展
PimpedAny
提供,您必须导入该扩展:
import spray.json._
def convertToJson // ...
然后,spray json使用spray.json.JsonWriter[A]
typeclass来确定可以序列化的内容。您必须提供证据,证明您的A
可以被视为JsonWriter[A]
。有两种方法可以做到这一点:
def convertToJson[A: JsonWriter](toConvert: A): JsValue =
toConvert.toJson
及
前者是后者的句法糖分
更新:
您还可以跳过toJson
扩展,直接使用JsonWriter
:
def convertToJson[A](toConvert: A)(implicit writer: JsonWriter[A]): JsValue =
writer.write(toConvert)
这就是toJson
正在做的事情
def convertToJson[A](toConvert: A)(implicit writer: JsonWriter[A]): JsValue =
writer.write(toConvert)