我想一個Seq[(String, String)]
轉換成JSON使用Scala玩隱式寫入或格式,但我面對這樣的錯誤:找不到類型爲Seq [(String,String)]的Json序列化程序。嘗試實施這種類型
No Json serializer found for type Seq[(String, String)]. Try to implement an implicit Writes or Format for this type.
我該如何解決這個問題?
我想一個Seq[(String, String)]
轉換成JSON使用Scala玩隱式寫入或格式,但我面對這樣的錯誤:找不到類型爲Seq [(String,String)]的Json序列化程序。嘗試實施這種類型
No Json serializer found for type Seq[(String, String)]. Try to implement an implicit Writes or Format for this type.
我該如何解決這個問題?
這取決於你想達到的目標。假設你有一個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)
}
}
編輯:
如果要序列斯卡拉元組到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)))
}
如果將它放在包對象中,它將對整個包可見。這是跨許多類(即整個應用程序)獲得一致行爲的好方法。
感謝您的回覆serejja,但我想知道如何準備我的控制器以序列化JSON格式的Seq [(String,String)]。 – lotfi 2014-09-05 10:35:36
給我更多的細節請 – lotfi 2014-09-05 10:43:42
@lotfitounsi請參閱我編輯的答案。這應該很好 – serejja 2014-09-05 11:49:51