我正在使用scala中的play框架开发app我希望在json中响应但是如何编译时编译错误即将到来
No Json deserializer found for type List[(String, String)]. Try to implement an implicit Writes or Format for this type.
列表缓冲区是
ListBuffer((This,a choke), (a Cv,15.6 gal))
我也做了这个
Json.toJson(list))
但仍然出现错误。
任何人都有一些想法来解决这个问题。
答案 0 :(得分:3)
您期望它是(String, String)
的json表示形式?
如果它是这样的:
yourListName : {
"1" : "2",
"3" : "4"
}
那么你可以使用Json.toJson(list.toMap)
。否则,您必须为Writes
定义(String, String)
,如下所示:
implicit val writer = new Writes[(String, String)] {
def writes(c: (String, String)): JsValue = {
Json.obj("something" -> c._1 + ", " + c._2)
//or like this:
//Json.obj(c._1 -> c._2)
}
}
请确保此作者在范围
答案 1 :(得分:0)
正如在这篇帖子[2.1] Json.format macros and Tuple2中讨论的那样,play-json 2.1不支持元组,主要是因为json不支持元组。如果您希望将元组作为数组写入,则可以使用元组的隐式格式:
implicit def tuple2Writes[A, B](implicit aWrites: Writes[A], bWrites: Writes[B]): Writes[Tuple2[A, B]] = new Writes[Tuple2[A, B]] {
def writes(tuple: Tuple2[A, B]) = JsArray(Seq(aWrites.writes(tuple._1), bWrites.writes(tuple._2)))
}
答案 2 :(得分:0)
您可以在一行中执行此操作,只需声明此隐式:
implicit def tuple2[A : Writes, B : Writes] = Writes[(A, B)] ( t => Json.obj("something1" -> t._1, "something1" -> t._2) )