2014-10-02 62 views
2

我有一个函数,它将采用某种类型的参数,将该参数转换为Json然后将其返回。这里的问题是我的函数不能在参数上调用.toJson,因为它不知道它。如何创建一个函数,它只接受可以使用spray-json转换为json的类型

例子:

def convertToJson[A](toConvert: A): JsValue = 
    toConvert.toJson 

这显然是不行的,但我想知道我怎么能做出类似这样的工作的东西吗?我怎么能概括这个函数来处理我所有可序列化的case类?没有一些可以添加的统一类型,它允许此函数接受所有可序列化的case类。

如果需要更多信息或需要更好的解释,请告诉我。

回答

6

toJson方法是由隐扩展PimpedAny,你必须导入提供:

import spray.json._ 

def convertToJson // ... 

然后,喷雾JSON使用spray.json.JsonWriter[A]类型类,以确定什么可以被序列化。你必须提供证据,你的A可以被视为JsonWriter[A]。有两种方法可以做到这一点:

def convertToJson[A: JsonWriter](toConvert: A): JsValue = 
    toConvert.toJson 

def convertToJson[A](toConvert: A)(implicit writer: JsonWriter[A]): JsValue = 
    toConvert.toJson 

随着后者前者是语法糖。

更新

您也可以跳过toJson延伸并直接使用JsonWriter

def convertToJson[A](toConvert: A)(implicit writer: JsonWriter[A]): JsValue = 
    writer.write(toConvert) 

这将是完全什么toJson在做什么。

相关问题