无法将scala地图转换为json with play 2

时间:2015-05-06 08:33:33

标签: json scala playframework-2.0

我有一个带有可选变量" 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序列化程序。尝试为此类型实现隐式Writes或Format。

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

2 个答案:

答案 0 :(得分:2)

我认为你应该改变你的代码:

def putInMap(obj: SignUp) = {

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

当没有值时,使用getOrElse访问值或默认值:空字符串或您想要的字符串,

如果不是,你应该尝试使用隐写方法写入解析Json,如在此link的使用写入转换器中的播放框架文档所建议的那样,不要忘记使用.writeNullable作为Option [String]字段< / p>

答案 1 :(得分:0)

首先,您无需将其转换为地图。

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

它将为您输出JsValue