Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何创建一个函数,该函数只接受可以使用spray json转换为json的类型_Scala_Spray_Spray Json - Fatal编程技术网

Scala 如何创建一个函数,该函数只接受可以使用spray json转换为json的类型

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

我有一个函数,它将接受某种类型的参数,将该参数转换为JSON,然后返回它。这里的问题是,我的函数无法对参数调用.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)