2014-10-02 60 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在做什麼。

相關問題