我有一个带有可选变量" 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。
有没有其他方法可以解决此错误,或者我必须为此实现隐式写入?
答案 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
。