找不到类型Seq[(字符串,字符串)]的Json序列化程序。尝试实现此类型的隐式写入或格式
我想用Scala play将找不到类型Seq[(字符串,字符串)]的Json序列化程序。尝试实现此类型的隐式写入或格式,json,scala,playframework-2.2,Json,Scala,Playframework 2.2,我想用Scala play将Seq[(String,String)]转换成JSON,但我面临以下错误: 找不到类型Seq[(字符串,字符串)]的Json序列化程序。尝试实现此类型的隐式写入或格式 我如何解决这个问题?这取决于您试图实现的目标。假设您有一个Seq[(String,String)]如下: val tuples = Seq(("z", "x"), ("v", "b")) 如果您尝试按以下方式序列化它: { "z" : "x", "v" : "b" } 然后只需使用Json.
Seq[(String,String)]
转换成JSON,但我面临以下错误:
找不到类型Seq[(字符串,字符串)]的Json序列化程序。尝试实现此类型的隐式写入或格式
我如何解决这个问题?这取决于您试图实现的目标。假设您有一个
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)
}
}
编辑:
import play.api.mvc._
import play.api.libs.json._
class MyController extends Controller {
implicit val writer = new Writes[(String, String)] {
def writes(t: (String, String)): JsValue = {
Json.obj("something" -> t._1 + ", " + t._2)
}
}
def myAction = Action { implicit request =>
val tuples = Seq(("z", "x"), ("v", "b"))
Ok(Json.toJson(tuples))
}
}
如果您想将Scala元组序列化为2元素JSON数组(这非常常见),那么您可以为2元组(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)]。请提供更多详细信息please@lotfitounsi请看我编辑的答案。这应该行得通