找不到类型Seq[(字符串,字符串)]的Json序列化程序。尝试实现此类型的隐式写入或格式

找不到类型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.

我想用Scala play将
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请看我编辑的答案。这应该行得通