无法通过播放 2 将 Scala 映射转换为 json

unable to convert scala map to json with play 2

我有一个案例 class 注册了一个可选变量 "secondaryEmail"

case class SignUp(firstNname : String, 
                  var lastName: String, 
                  var email: String,
                  var secondryEmail : Option[String]
                  )

我想将其转换为 Json 因为我已经编写了一个函数将其转换为 Map

def putInMap(obj: SignUp) = {

    val signupMap = Map(
        "firstname" -> obj.firstNname,
        "lastname" -> obj.lastName,
        "email" -> obj.email,
        "secondryemail" -> Some(obj.secondryEmail)
        )
        signupMap
  } 

现在,当我尝试将其转换为 Json 时

val signupjson = Json.toJson(putInMap(SignUp))

它给我这个错误

未找到类型 scala.collection.immutable.Map[String,java.io.Serializable] 的 Json 序列化程序。尝试为此类型实现隐式写入或格式。

是否有任何其他方法可以解决此错误,或者我必须为此实现隐式写入?

我认为你应该这样修改你的代码:

def putInMap(obj: SignUp) = {

    val signupMap = Map(
        "firstname" -> obj.firstNname,
        "lastname" -> obj.lastName,
        "email" -> obj.email,
        "secondryemail" -> obj.secondryEmail.getOrElse("")
        )
        signupMap
   } 

使用 getOrElse 访问一个值或在没有值时访问默认值:空字符串或您想要的任何字符串,

如果不是,你应该尝试编写用于解析 Json 的隐式方法 writes,正如 play framework documentation 在 Using Writes converters at this link 中所建议的,不要忘记使用 .writeNullable选项[String] 字段

您不需要首先将其转换为地图。

implicit val signupWriter = Json.writes[SignUp]
val up = SignUp("Jo", "B", "foo@mail.com", None)
val json = Json.toJson(up)

它会为你输出一个JsValue