2017-02-24 79 views
0

我正在嘗試使用Scala和Play。我想返回一個Tuple,在這種情況下是一個Tuple3,但可以是任何大小的Tuple。我想將元組序列化爲JSON,但Play似乎不知道如何序列化元組。Play框架序列Tuple3

我只是試圖做類似的東西找到了類型(字符串,字符串,字符串)以下

def getClient(clientId: Int) = Action { 
    val result = ("I", "AM", "TUPLE") 
    Ok(Json.toJson(result)) 
} 

沒有JSON序列化非常簡單。嘗試爲此類型實現隱式Writes或Format。

我試過這樣的事情,但它似乎只適用於Tuple2。

val seq = Seq[(String,String)](("attr1"->"val1"),("attr2"->"val2")) 


val s = Json.toJson(seq.map(e => Json.obj((e._1 -> e._2)))) 
Ok(s).as(JSON) 
+0

你爲什麼要rendre一個Tuple3爲JSON?你如何讓你的Json看起來像?如果你知道這一點,你可以寫你自己的隱式作家。但是有沒有你不想使用案例課的理由? – Simon

+0

如果我的服務類方法返回元組(客戶端,Seq [Project]),我想將其序列化爲Json以返回客戶端。在Java中,我只是將它們包裝到一個DTO對象中。想知道是否需要在Scala中做同樣的事情。 – greyfox

+1

好的..但是你期待什麼JSON? –

回答

1

您可以像這樣創建一個案例類。

case class MyCaseClass(string1: String, string2: String, string3: String) 

,那麼你必須添加一個隱含的作家

implicit val myCaseClassFormat = Json.format[MyCaseClass] 

那麼你可以做Json.toJson(MyCaseClass("I", "AM", "TUPLE"))

+0

這就是我最終做的,與Java相同的方法 – greyfox