2014-09-05 83 views

回答

10

這取決於你想達到的目標。假設你有一個Seq[(String, String)]這樣的:

val tuples = Seq(("z", "x"), ("v", "b")) 

如果你想它序列如下:

{ 
    "z" : "x", 
    "v" : "b" 
} 

然後,只需使用Json.toJson(tuples.toMap)。如果你想有你的元組的一些定製表示,因爲編譯器提示你可以定義一個Writes

implicit val writer = new Writes[(String, String)] { 
    def writes(t: (String, String)): JsValue = { 
    Json.obj("something" -> t._1 + ", " + t._2) 
    } 
} 

編輯

​​
+0

感謝您的回覆serejja,但我想知道如何準備我的控制器以序列化JSON格式的Seq [(String,String)]。 – lotfi 2014-09-05 10:35:36

+0

給我更多的細節請 – lotfi 2014-09-05 10:43:42

+0

@lotfitounsi請參閱我編輯的答案。這應該很好 – serejja 2014-09-05 11:49:51

1

如果要序列斯卡拉元組到2 -element JSON數組(這是很常見的),那麼你可以爲2-Tuple(A,B)的一般情況編寫一個隱式的Writes對象。這將處理你的(String,String)以及任何其他類型的組合!

implicit def tuple2Writes[A, B](implicit w1: Writes[A], w2: Writes[B]): Writes[(A, B)] = new Writes[(A, B)] { 
    def writes(tuple: (A, B)) = JsArray(Seq(w1.writes(tuple._1), w2.writes(tuple._2))) 
} 

如果將它放在包對象中,它將對整個包可見。這是跨許多類(即整個應用程序)獲得一致行爲的好方法。

相關問題